来自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 ...但是我在哪里错了?
感谢您的帮助。
答案 0 :(得分:0)
天哪,对不起...我没有看到我让16个输出而不是3个...
答案 1 :(得分:0)
您已经自己找到了解决方案。但是,如果再次遇到类似问题,可以使用mx.visualization.print_summary()。此功能对于检查模型中不同层的形状非常有用。