从 TF1 移动到 TF2 时,具有多个输入的功能模型中的 AssertionError
AssertionError in Functional Model with Multiple Inputs when moving from TF1 to TF2
您好,我正在尝试将旧模型从 TF1 上的 运行ning 转换为 TF2,但 运行ning 遇到了一些问题。一直在使用 google colab 在 TF1 和 TF2 之间切换,使用 TF1 似乎 运行 一切正常,但使用 TF2 则不然。我已经用下面的一小段代码复制了这个问题。
from keras.layers import *
from keras import Model
from keras.backend import squeeze
def create_model():
inputA = Input(shape=(1,))
x = Dense(1)(inputA)
x = Model(inputs=inputA, outputs=x)
print(x.predict([0.1]))
inputB = Input(shape=(1,))
y = Dense(1)(inputB)
y = Model(inputs=inputB, outputs=y)
print(y.predict([0.1]))
combined = concatenate(inputs = [x.output,y.output])
model = Model(inputs=[x.input, y.input], outputs=combined)
return model
if (__name__ == "__main__") :
model = create_model()
model.compile(loss='mse',optimizer='RMSprop')
model.summary()
print(model.predict([[0.1],[0.1]]))
这里是使用 TF2 的错误:
AssertionError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1462 predict_function *
return step_function(self, iterator)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1452 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1445 run_step **
outputs = model.predict_step(data)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1418 predict_step
return self(x, training=False)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:985 __call__
outputs = call_fn(inputs, *args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py:386 call
inputs, training=training, mask=mask)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py:517 _run_internal_graph
assert x_id in tensor_dict, 'Could not compute output ' + str(x)
AssertionError: Could not compute output Tensor("concatenate/concat:0", shape=(None, 2), dtype=float32)
如有任何帮助,我们将不胜感激。
谢谢,
V_W
您可以像这样修改您的代码,
from tf.keras.layers import *
from tf.keras import Model
def create_model():
inputA = Input(shape=(1,))
x = Dense(1)(inputA)
modelA = Model(inputs=inputA, outputs=x)
print(modelA.predict([0.1]))
inputB = Input(shape=(1,))
y = Dense(1)(inputB)
modelB = Model(inputs=inputB, outputs=y)
print(modelB.predict([0.1]))
concat = Concatenate()( [ x , y ] )
model = Model(inputs=[ inputA, inputB ], outputs=concat )
return model
您好,我正在尝试将旧模型从 TF1 上的 运行ning 转换为 TF2,但 运行ning 遇到了一些问题。一直在使用 google colab 在 TF1 和 TF2 之间切换,使用 TF1 似乎 运行 一切正常,但使用 TF2 则不然。我已经用下面的一小段代码复制了这个问题。
from keras.layers import *
from keras import Model
from keras.backend import squeeze
def create_model():
inputA = Input(shape=(1,))
x = Dense(1)(inputA)
x = Model(inputs=inputA, outputs=x)
print(x.predict([0.1]))
inputB = Input(shape=(1,))
y = Dense(1)(inputB)
y = Model(inputs=inputB, outputs=y)
print(y.predict([0.1]))
combined = concatenate(inputs = [x.output,y.output])
model = Model(inputs=[x.input, y.input], outputs=combined)
return model
if (__name__ == "__main__") :
model = create_model()
model.compile(loss='mse',optimizer='RMSprop')
model.summary()
print(model.predict([[0.1],[0.1]]))
这里是使用 TF2 的错误:
AssertionError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1462 predict_function *
return step_function(self, iterator)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1452 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1445 run_step **
outputs = model.predict_step(data)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1418 predict_step
return self(x, training=False)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:985 __call__
outputs = call_fn(inputs, *args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py:386 call
inputs, training=training, mask=mask)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py:517 _run_internal_graph
assert x_id in tensor_dict, 'Could not compute output ' + str(x)
AssertionError: Could not compute output Tensor("concatenate/concat:0", shape=(None, 2), dtype=float32)
如有任何帮助,我们将不胜感激。
谢谢, V_W
您可以像这样修改您的代码,
from tf.keras.layers import *
from tf.keras import Model
def create_model():
inputA = Input(shape=(1,))
x = Dense(1)(inputA)
modelA = Model(inputs=inputA, outputs=x)
print(modelA.predict([0.1]))
inputB = Input(shape=(1,))
y = Dense(1)(inputB)
modelB = Model(inputs=inputB, outputs=y)
print(modelB.predict([0.1]))
concat = Concatenate()( [ x , y ] )
model = Model(inputs=[ inputA, inputB ], outputs=concat )
return model