迁移学习实践遇Python报错:无法将序列与float类型非整数相乘
解决"can't multiply sequence by non-int of type 'float'"报错问题
这个报错的根源很清晰——你在生成标签列表时用了普通除法/,得到的结果是浮点数类型,而Python里列表只能和整数相乘,哪怕数值上是整数但类型是float也不行。比如如果nb_train_samples是100,100/2得到的是50.0(float),用它去乘[0]就会触发这个错误。
两种快速解决方法:
方法一:使用整数除法
//
Python的//运算符会直接返回整数结果(向下取整),刚好符合你这里把样本均匀分成两类的需求:train_data = np.load(open('bottleneck_features_train.npy', 'rb')) train_labels = np.array( [0] * (nb_train_samples // 2) + [1] * (nb_train_samples // 2)) validation_data = np.load(open('bottleneck_features_validation.npy')) validation_labels = np.array( [0] * (nb_validation_samples // 2) + [1] * (nb_validation_samples // 2))方法二:用
int()强制转换为整数
如果你更习惯用/,可以把除法结果包裹在int()里,将浮点数转为整数:train_data = np.load(open('bottleneck_features_train.npy', 'rb')) train_labels = np.array( [0] * int(nb_train_samples / 2) + [1] * int(nb_train_samples / 2)) validation_data = np.load(open('bottleneck_features_validation.npy')) validation_labels = np.array( [0] * int(nb_validation_samples / 2) + [1] * int(nb_validation_samples / 2))
额外提醒:
从你的代码逻辑来看,是要把样本均匀分成两类,所以最好确保nb_train_samples和nb_validation_samples都是偶数,这样标签数量和样本数能完全匹配,避免后续出现数据不对应的问题。
内容的提问来源于stack exchange,提问作者Oussama
相关产品推荐
相关产品推荐

