我不明白使用 mxnet 的 "Shape inconsistent" 错误

I don't understand the "Shape inconsistent" error using mxnet

来自 Keras,我尝试使用 MXNet 重现我的简单模型以使用 Module 进行预测。

我正在使用那个简单的数据集:https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

我有 13 个输入(从酒精到脯氨酸)要发送到模型,我需要对第一列 "wine type" 进行分类,所以我创建了一个 nd.array 有 3 个条目。


x = data.values[: , 1:14]
y = data.values[:, 0]

X = mx.nd.array(x)
Y = []
for i, v in enumerate(y):
    d = [0,0,0]
    d[int(v)-1] = 1
    Y.append(d)
Y = mx.nd.array(Y)
Y.shape, X.shape
# ((178, 3), (178, 13))

然后我创建模型和 NDIterator:


net = mx.symbol.Variable('winechemical')
net = mx.symbol.FullyConnected(net, num_hidden=64)
net = mx.symbol.Activation(net, act_type='relu')
net = mx.symbol.FullyConnected(net, num_hidden=32)
net = mx.symbol.Activation(net, act_type='relu')
net = mx.symbol.FullyConnected(net, num_hidden=16)
net = mx.symbol.SoftmaxOutput(net, name='wineclass')

model = Module(symbol=net, context=mx.cpu(),
                  data_names=['winechemical'],
                  label_names=['wineclass_label'])

gen = mx.io.NDArrayIter(X, label=Y, 
                        batch_size=10, 
                        shuffle=True, data_name='winechemical', 
                        label_name='wineclass_label')

但是当我尝试使用 "fit" 方法 "train" 模型时,我得到了这个错误:

model.fit(gen, num_epoch=5)

[...]
Error in operator wineclass: Shape inconsistent, Provided = [10,3], inferred shape=[10]

我很确定我不理解要使用的形状,因为我来自使用不同形状的 Keras...但是我哪里错了?

感谢您的帮助。

我的天,抱歉...我没看到我让 16 个输出而不是 3 个...

您已经自己找到了解决方案。但是如果你 运行 再次遇到类似的问题,你可以使用 mx.visualization.print_summary() 这个功能对于检查模型中不同层的形状非常有用。