autokeras icon indicating copy to clipboard operation
autokeras copied to clipboard

Building Automodel model fails when using two ImageInput()s

Open Saurav-K-Aryal opened this issue 3 years ago • 4 comments

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.

Saurav-K-Aryal avatar Apr 22 '21 02:04 Saurav-K-Aryal

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

janTOffermann avatar Jun 15 '21 04:06 janTOffermann

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.

stale[bot] avatar Aug 18 '21 02:08 stale[bot]

I have the same error - is there a work around?

matt-d avatar Oct 17 '22 16:10 matt-d

I have the same error Is there no solution yet?

wajdi-22 avatar May 15 '23 17:05 wajdi-22