Tensorflow keras.models.load_model()给出错误;ValueError:方程“的输入为0”;baik,baij->;“bakj”;,期望2“;
我的代码将批量矩阵乘法“tf.einsum('baik,baij->bakj',q,k)/np.sqrt(dv)”作为它的一部分。训练完模型后,我使用“model.save('./model')保存它,现在我想加载保存的模型。我用“model=keras.models.load_model('./model',compile=False,custom_objects={'f1':f1})”的方式进行了尝试。但它给出了下面的错误。为什么会发生这种情况Tensorflow keras.models.load_model()给出错误;ValueError:方程“的输入为0”;baik,baij->;“bakj”;,期望2“;,tensorflow,keras,deep-learning,attention-model,mobilenet,Tensorflow,Keras,Deep Learning,Attention Model,Mobilenet,我的代码将批量矩阵乘法“tf.einsum('baik,baij->bakj',q,k)/np.sqrt(dv)”作为它的一部分。训练完模型后,我使用“model.save('./model')保存它,现在我想加载保存的模型。我用“model=keras.models.load_model('./model',compile=False,custom_objects={'f1':f1})”的方式进行了尝试。但它给出了下面的错误。为什么会发生这种情况 Traceback (most recent
Traceback (most recent call last):
File "test_pro.py", line 37, in <module>
model = keras.models.load_model('./model', compile=False, custom_objects={'f1': f1})
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/save.py", line 212, in load_model
return saved_model_load.load(filepath, compile, options)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/saved_model/load.py", line 147, in load
keras_loader.finalize_objects()
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/saved_model/load.py", line 612, in finalize_objects
self._reconstruct_all_models()
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/saved_model/load.py", line 631, in _reconstruct_all_models
self._reconstruct_model(model_id, model, layers)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/saved_model/load.py", line 677, in _reconstruct_model
created_layers) = functional_lib.reconstruct_from_config(
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1285, in reconstruct_from_config
process_node(layer, node_data)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1233, in process_node
output_tensors = layer(input_tensors, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1012, in __call__
outputs = call_fn(inputs, *args, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1327, in _call_wrapper
return self._call_wrapper(*args, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1359, in _call_wrapper
result = self.function(*args, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py", line 201, in wrapper
return target(*args, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/ops/special_math_ops.py", line 751, in einsum
return _einsum_v2(equation, *inputs, **kwargs)
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/ops/special_math_ops.py", line 1174, in _einsum_v2
_einsum_v2_parse_and_resolve_equation(equation, input_shapes))
File "/home/dcs2016csc007/.local/lib/python3.8/site-packages/tensorflow/python/ops/special_math_ops.py", line 1254, in _einsum_v2_parse_and_resolve_equation
raise ValueError('Got {} inputs for equation "{}", expecting {}'.format(
ValueError: Got 0 inputs for equation "baik,baij->bakj", expecting 2
def MultiHeadsAttModel(l=7*7, d=1024 , dv=64, dout=1024, nv = 16 ):
v1 = Input(shape = (l, d))
q1 = Input(shape = (l, d))
k1 = Input(shape = (l, d))
v2 = Dense(dv*nv, activation = "relu")(v1)
q2 = Dense(dv*nv, activation = "relu")(q1)
k2 = Dense(dv*nv, activation = "relu")(k1)
v = Reshape([l, nv, dv])(v2)
q = Reshape([l, nv, dv])(q2)
k = Reshape([l, nv, dv])(k2)
att = tf.einsum('baik,baij->bakj',q, k)/np.sqrt(dv) #batch matrix multiplication
att = Lambda(lambda x: K.softmax(x) , output_shape=(l, nv, nv))(att)
out = tf.einsum('bajk,baik->baji',att, v)
out = Reshape([l, d])(out)
out = Add()([out, q1])
out = Dense(dout, activation = "relu")(out)
return Model(inputs=[q1,k1,v1], outputs=out)
def create_model(input_shape, output_classes):
mobile = tf.keras.applications.mobilenet.MobileNet(weights='imagenet')
x = mobile.layers[-6].input
if True:
x = Reshape([7*7,1024])(x)
att = MultiHeadsAttModel(l=7*7, d=1024 , dv=64, dout=1024, nv = 16 )
x = att([x,x,x])
x = Reshape([7,7,1024])(x)
x = BatchNormalization()(x)