【发布时间】:2017-08-23 21:27:41
【问题描述】:
提前感谢您的帮助。
我在让 mxnet 模型收敛到任何东西时遇到一些问题:它似乎卡在接近其初始权重。
一个工作示例(尽管我今天很难让许多这样的模型工作)。我已经尝试了以下方法,其中包含一系列时期(最多 100 个)和一系列学习率(0.001 到 10),但无法从中得到任何明智的结果。
import mxnet as mx
import numpy as np
inputs = np.expand_dims(np.random.uniform(size=10000), axis=1)
labels = np.sin(inputs)
data_iter = mx.io.NDArrayIter(data=inputs, label=labels, data_name='data', label_name='label', batch_size=50)
data = mx.sym.Variable('data')
label = mx.sym.Variable('label')
fc1 = mx.sym.FullyConnected(data=data, num_hidden=128)
ac1 = mx.sym.Activation(data=fc1, act_type='relu')
fc2 = mx.sym.FullyConnected(data=ac1, num_hidden=64)
ac2 = mx.sym.Activation(data=fc2, act_type='relu')
fc3 = mx.sym.FullyConnected(data=ac2, num_hidden=16)
ac3 = mx.sym.Activation(data=fc3, act_type='relu')
output = mx.sym.FullyConnected(data=ac3, num_hidden=1)
loss = mx.symbol.MakeLoss(mx.symbol.square(output - label), name="loss")
model = mx.module.Module(symbol=loss, data_names=('data',), label_names=('label',))
import logging
logging.getLogger().setLevel(logging.DEBUG)
model.fit(data_iter,
optimizer='sgd',
optimizer_params={'learning_rate':0.1},
eval_metric='mse',
num_epoch=5)
导致:
INFO:root:Epoch[0] Train-mse=0.221155
INFO:root:Epoch[0] Time cost=0.173
INFO:root:Epoch[1] Train-mse=0.225179
INFO:root:Epoch[1] Time cost=0.176
INFO:root:Epoch[2] Train-mse=0.225179
INFO:root:Epoch[2] Time cost=0.179
INFO:root:Epoch[3] Train-mse=0.225179
INFO:root:Epoch[3] Time cost=0.176
INFO:root:Epoch[4] Train-mse=0.225179
INFO:root:Epoch[4] Time cost=0.183
很明显,培训并没有真正取得进展。
【问题讨论】:
-
您应该尝试在输出层使用 tanh 激活,这样 sin 的范围和网络的输出匹配。
-
好点。这是我为 SO 起草的一个简单示例,但我的问题甚至适用于更明智的输出层 :) 我使用的 mxnet 不正确,但我看不到在哪里!
标签: machine-learning neural-network deep-learning mxnet