TensorFlow报错TypeError: Expected float32, but got auto of type 'str'如何解决
报错原因
问题出在model.compile的损失函数配置环节:你直接传入了tf.keras.losses.SparseCategoricalCrossentropy类本身,没有完成实例化,导致Keras解析参数时出现类型匹配错误。
修复方案
两种可用修复方式,按需选择即可:
- 方案1:实例化损失类(适合需要自定义损失参数的场景,比如修改reduction策略、设置
from_logits等)
将compile代码修改为:
model.compile( loss = tf.keras.losses.SparseCategoricalCrossentropy(), optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001), metrics = ['accuracy'] )
补充说明:你当前输出层已经配置了softmax激活,损失默认的from_logits=False参数刚好匹配,无需额外调整。如果输出层未加softmax,可将实例化代码改为tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),数值稳定性更好。
- 方案2:使用字符串形式指定损失(无需自定义参数时更简洁)
直接用Keras内置的损失名称字符串即可:
model.compile( loss = 'sparse_categorical_crossentropy', optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001), metrics = ['accuracy'] )
内容的提问来源于stack exchange,提问作者tikendraw
相关产品推荐
相关产品推荐

