我不了解使用mxnet的“形状不一致”错误

时间:2018-11-10 11:01:00

标签: python mxnet

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

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

我有13个输入(从酒精到脯氨酸)要发送到模型,我需要对第一列“葡萄酒类型”进行分类,因此我创建了一个具有3个条目的nd.array。


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')

但是当我尝试使用“拟合”方法“训练”模型时,出现了此错误:

model.fit(gen, num_epoch=5)

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

天哪,对不起...我没有看到我让16个输出而不是3个...

答案 1 :(得分:0)

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