You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:49:07