使用InceptionV3迁移学习遇Tensor不可哈希错误,如何解决?
解决InceptionV3迁移学习中Model构造的Tensor哈希错误
这个错误很常见,主要是因为你在创建Model对象时用了旧的参数写法导致的。下面是具体的解决步骤:
直接修正代码
问题出在Model构造函数的参数上——在新版TensorFlow中,output参数已经被弃用,正确的参数名是outputs(注意复数形式)。把这行代码:
final_model = Model(inception_model.input,output=predictions)
改成下面两种写法中的任意一种都可以:
- 显式指定参数名(更清晰,推荐):
final_model = Model(inputs=inception_model.input, outputs=predictions)
- 使用位置参数(因为
Model的第一个参数是inputs,第二个是outputs):
final_model = Model(inception_model.input, predictions)
完整修正后的代码
这里给你整理好整个可运行的代码片段,顺便补充compile方法的必要参数(原代码里compile()是空的,训练时会报错):
from tensorflow.keras.applications import InceptionV3 from tensorflow.keras.layers import GlobalAveragePooling2D, Dense from tensorflow.keras.models import Model # 加载预训练的InceptionV3,不包含顶层分类器 inception_model = InceptionV3(weights='imagenet', include_top=False) # 构建自定义顶层 output_inception = inception_model.output output_globalavgpooling = GlobalAveragePooling2D()(output_inception) output_dense = Dense(1024, activation='relu')(output_globalavgpooling) predictions = Dense(1, activation='sigmoid')(output_dense) # 修正后的Model构造 final_model = Model(inputs=inception_model.input, outputs=predictions) # 补充compile的必要参数(比如优化器、损失函数) final_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 查看最终模型的结构(建议看final_model的summary,而不是inception_model的) final_model.summary()
错误原因解释
TensorFlow在更新后,对Model类的参数做了规范,旧的output单参数写法会导致内部张量的哈希逻辑冲突,触发Tensor is unhashable的错误。改用outputs复数参数后,框架能正确识别输出张量的集合,避免这个问题。
内容的提问来源于stack exchange,提问作者Sabito
相关产品推荐
相关产品推荐

