使用Tflearn .fit()方法传入numpy.ndarray触发TypeError问题
解决TFlearn model.fit()中的TypeError: unhashable type: 'numpy.ndarray'
嘿,这个错误我之前帮人排查过好多次,大概率是你给model.fit()传数据的时候踩了格式的坑——尤其是用字典传参时容易犯的小错误,我来帮你一步步拆解:
最常见的原因:把numpy数组当字典键传入了
这个错误的核心是numpy数组不能作为字典的键(因为它是不可哈希的类型),如果你的代码里写了类似下面的错误写法,就会触发这个报错:
# ❌ 错误:把x_train数组当成了字典的键 model.fit({x_train: y_train}, n_epoch=10) # ❌ 错误:输出用数组当键 model.fit({'input': x_train}, {y_onehot: 'output'})
正确的传参方式
如果是单输入单输出的MNIST模型,其实根本不需要用字典,直接传numpy数组就行:
# ✅ 直接传数组的正确写法 model.fit(x_train, y_onehot, n_epoch=10, validation_set=(test_x, test_y), show_metric=True)
如果一定要用字典(比如多输入模型的场景),要确保字典的键是字符串,且和你定义模型时输入/输出层的name参数完全匹配:
# 先确保模型定义时给输入输出层起了名字 net = input_data(shape=[None, 784], name='mnist_input') # ...中间层... net = regression(net, optimizer='adam', loss='categorical_crossentropy', name='mnist_output') # ✅ 用字典传参的正确写法 model.fit( {'mnist_input': x_train}, {'mnist_output': y_onehot}, n_epoch=10, validation_set=({'mnist_input': test_x}, {'mnist_output': test_y}), show_metric=True )
其他可能的排查方向
如果上面的方法没解决,再检查这几点:
- 数据形状和类型是否正确:MNIST的训练集
x应该是(60000, 784)的二维数组(28*28像素展平),y是(60000, 10)的独热编码数组,且数据类型最好是np.float32,可以用下面的代码转换:x_train = x_train.astype(np.float32) y_onehot = y_onehot.astype(np.float32) - TFlearn版本兼容性:旧版本的TFlearn对某些numpy数组格式的支持可能有bug,尝试更新到最新版本:
pip install --upgrade tflearn tensorflow
至于你说用字典传参触发另一个错误,大概率是字典的键名和模型层的name不匹配,或者数据形状和模型输入要求不对应,按照上面的正确写法调整应该就能解决。
内容的提问来源于stack exchange,提问作者Flajt
相关产品推荐
相关产品推荐

