autokeras
autokeras copied to clipboard
Building Automodel model fails when using two ImageInput()s
Bug Description
Building Automodel multimodal classification model fails with two ImageInputs.
I get the following error ~5 times
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
ending in a
RuntimeError: Too many failed attempts to build model.
Are two ImageInputs() not yet supported?
Bug Reproduction
Code for reproducing the bug:
import autokeras as ak
from tensorflow import keras
import helpers as utils
import numpy as np
metrics = ['accuracy', keras.metrics.TopKCategoricalAccuracy(k=5)]
clf = ak.AutoModel(
inputs=[ak.ImageInput(name='img1'), ak.ImageInput(name='img2')],
outputs=ak.ClassificationHead(loss='binary_crossentropy', metrics=metrics),
objective='val_accuracy',
project_name="ears",
tuner="hyperband"
)
at = AutoImageClassificationTrain('./Dataset/')
X, Y = at.create_x_and_y()
(pairTrain, labelTrain) = utils.make_pairs(X, Y)
# (pairVal, labelVal) = utils.make_pairs(valX, valY)
clf.fit(x=[pairTrain[:, 0], pairTrain[:, 1]], y=labelTrain[:], epochs=50, batch_size=32, validation_split = 0.2, metrics=top_ks)
model = clf.export_model()
try:
model.save("ear_discriminator", save_format="tf")
except Exception:
model.save("ear_discriminator.h5")
print('\n\n\n[INFO] Completed succesfully!')
Data used by the code:
Two input RGB images as described.
Expected Behavior
Setup Details
Include the details about the versions of:
- OS type and version: Ubuntu 18.04.5 LTS
- Python: 3.8.5
- autokeras: 1.0.12
- keras-tuner: 1.0.2
- scikit-learn: 0.23.2
- numpy: 1.19.2
- pandas: 1.1.3
- tensorflow: 2.4.1
Additional context
Autokeras worked fine 3-4 days ago for a simple ImageClassification
task. But, this seems to be something within Autokeras instantiating two ResNet-50s while initiating search?
Below is the error trace
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 0/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 1/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 2/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 3/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 4/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
Invalid model 5/5
Traceback (most recent call last):
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/graph.py", line 254, in build
model = tf.keras.Model(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 120, in __init__
self._init_graph_network(inputs, outputs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 517, in _method_wrapper
result = method(self, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 203, in _init_graph_network
nodes, nodes_by_depth, layers, _ = _map_graph_network(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1000, in _map_graph_network
raise ValueError('The name "' + name + '" is used ' +
ValueError: The name "resnet50" is used 2 times in the model. All layer names should be unique.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "auto_modeler.py", line 25, in <module>
clf.fit(x=[pairTrain[:, 0], pairTrain[:, 1]], y=labelTrain[:], epochs=50, batch_size=32, validation_split = 0.2, metrics=top_ks)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/auto_model.py", line 273, in fit
self.tuner.search(
File "/home/saurav/anaconda3/lib/python3.8/site-packages/autokeras/engine/tuner.py", line 178, in search
self.hypermodel.build(hp)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 64, in _build_wrapper
return self._build(hp, *args, **kwargs)
File "/home/saurav/anaconda3/lib/python3.8/site-packages/kerastuner/engine/hypermodel.py", line 112, in build
raise RuntimeError(
RuntimeError: Too many failed attempts to build model.
Any updates on this issue? I'm having the same problem with the following setup:
- OS type and version: Ubuntu 18.04.5 LTS
- Python: 3.7.10
- autokeras: 1.0.14
- keras-tuner: 1.0.2
- scikit-learn: 0.24.2
- numpy: 1.18.5
- pandas: 1.2.4
- tensorflow: 2.3.0
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
I have the same error - is there a work around?
I have the same error Is there no solution yet?