加载 tf.keras 模型,ValueError: The two structure don't have the same nested structure
Posted
技术标签:
【中文标题】加载 tf.keras 模型,ValueError: The two structure don\'t have the same nested structure【英文标题】:Loading tf.keras model, ValueError: The two structures don't have the same nested structure加载 tf.keras 模型,ValueError: The two structure don't have the same nested structure 【发布时间】:2021-11-20 15:12:35 【问题描述】:我创建了一个具有 BERT 的 tf.keras model
,我想训练并保存它以供进一步使用。
加载此模型是一个大问题,因为我不断收到错误消息:ValueError: The two structures don't have the same nested structure.
我对模型进行了很多简化,以查看问题究竟出在哪里。代码很简单:
bert = TFBertModel.from_pretrained("bert-base-german-cased")
model_name = "Model"
txt12_input_ids = tf.keras.layers.Input(shape=(max_length,), name='txt12_input_ids', dtype='int32')
txt12_mask = tf.keras.layers.Input(shape=(max_length,), name='txt12_mask', dtype='int32')
txt12_outputs = bert(txt12_input_ids, txt12_mask).pooler_output
model_K = tf.keras.Model(inputs=(txt12_input_ids, txt12_mask), outputs=txt12_outputs, name=model_name)
model_K.compile(optimizer=Adam(1e-5), loss="binary_crossentropy", metrics="accuracy")
model_K.save(dir_path+'Prob')
model_2 = tf.keras.models.load_model(dir_path+'Prob')
开始回复之前的一些注意事项:
我确实指定了dtype
。
不,我不想只保存重量。
我尝试改用tf.keras.models.save_model(model_K, dir_path+'Prob')
,但它给出了同样的错误。
最后一件事,我与tf version: 2.6.0
合作。有人知道怎么解决吗?
完整的错误信息:
ValueError: The two structures don't have the same nested structure.
First structure: type=tuple str=(('input_ids': TensorSpec(shape=(None, 5), dtype=tf.int32, name='input_ids/input_ids'), None, None, None, None, None, None, None, None, False), )
Second structure: type=tuple str=((TensorSpec(shape=(None, 120), dtype=tf.int32, name='input_ids'), TensorSpec(shape=(None, 120), dtype=tf.int32, name='attention_mask'), None, None, None, None, None, None, None, False), )
More specifically: Substructure "type=dict str='input_ids': TensorSpec(shape=(None, 5), dtype=tf.int32, name='input_ids/input_ids')" is a sequence, while substructure "type=TensorSpec str=TensorSpec(shape=(None, 120), dtype=tf.int32, name='input_ids')" is not
Entire first structure:
(('input_ids': ., ., ., ., ., ., ., ., ., .), )
Entire second structure:
((., ., ., ., ., ., ., ., ., .), )
【问题讨论】:
【参考方案1】:查看 GitHub 上的 issue here。它应该可以帮助您解决形状问题。
【讨论】:
非常感谢!!!它确实有帮助,不幸的是我无法计算你的答案,因为我的名声很小。不过我做到了,所以我希望我的反馈以后会起作用。以上是关于加载 tf.keras 模型,ValueError: The two structure don't have the same nested structure的主要内容,如果未能解决你的问题,请参考以下文章
Keras ConvLSTM2D:保存模型时出现ValueError
JSONDecodeError:加载 tf.Keras 模型时的期望值