Google Colab运行TensorFlow训练时报错:无法将0.5625转为int64类型EagerTensor
错误原因
你传入model.fit的steps_per_epoch和validation_steps参数为浮点数类型,而TensorFlow要求这两个参数必须为整数,当存在小数部分时无法自动转换为int64类型的EagerTensor,因此触发报错。
你代码中直接使用/做除法运算,默认返回浮点数,只要样本数不能被batch_size整除,就会产生带小数的结果,进而触发该异常。
解决方案
有两种可选修改方式:
方案1:向下取整(丢弃最后不足一个batch的样本)
使用整数除法运算符//替代普通除法/,自动取整得到整数结果,修改训练代码如下:
model.fit( train_it, validation_data=valid_it, steps_per_epoch=train_it.samples // train_it.batch_size, validation_steps=valid_it.samples // valid_it.batch_size, epochs=10 )
方案2:向上取整(保留最后不足一个batch的样本)
如果需要把所有样本都纳入训练和验证流程,可以使用math.ceil对除法结果向上取整后转为整数:
首先导入math模块:
import math
再修改model.fit的对应参数:
model.fit( train_it, validation_data=valid_it, steps_per_epoch=math.ceil(train_it.samples / train_it.batch_size), validation_steps=math.ceil(valid_it.samples / valid_it.batch_size), epochs=10 )
注:你之前只修改
validation_steps没有解决问题,是因为steps_per_epoch参数同样存在浮点数问题,两个参数都需要修改为整数类型。
内容的提问来源于stack exchange,提问作者Richard Liang
相关产品推荐
相关产品推荐

