我试图用人工神经网络来模拟一个技术过程(一些非线性方程)。该职能有若干输入和若干产出(例如50项投入、150项产出-全部浮动)。
我已经成功地尝试了python库ffnet ( fortran库的包装器)。对于某个数据集,误差远低于0.2%。
它使用的是完全连通图和这些附加参数。
Basic assumptions and limitations:
Network has feed-forward architecture.
Input units have identity activation function, all other units have sigmoid activation function.
Provided data are automatically normalized, both input and output, with a linear mapping to the range (0.15, 0.85). Each input and output is treated separately (i.e. linear map is unique for each input and output).
Function minimized during training is a sum of squared errors of each output for each training pattern.我使用一个输入层,一个隐藏层(大小:输入向量的2/3 +输出向量的大小)和输出层。我用的是枕木共轭梯度优化器。
ffnet的缺点是训练时间长,并且缺乏使用GPU的功能。因此,我希望切换到另一个框架,并选择了keras和TensorFlow作为后端。
我试图对以前的配置进行建模:
model = Sequential()
model.add(Dense(n_hidden, input_dim=n_in))
model.add(BatchNormalization())
model.add(Dense(n_hidden))
model.add(Activation('sigmoid'))
model.add(Dense(n_out))
model.add(Activation('sigmoid'))
model.summary()
model.compile(loss='mean_squared_error',
optimizer='Adamax',
metrics=['accuracy'])然而,结果要糟糕得多,几千(!)的误差高达0.5%。训练的时代。在292个时代,ffnet的培训被自动取消。此外,网络响应与验证目标之间的差异不是集中在0,而是大部分为负值。我尝试过所有的优化器和不同的损失函数。我还跳过了BatchNormalization,并以与ffnet相同的方式手动实现了数据的规范化。什么都帮不上忙。
有没有人建议用角蛋白获得更好的结果?
发布于 2016-10-12 10:30:12
我知道你正试图用不同的库从头开始重新训练相同的架构。这里要记住的第一个基本问题是神经网络不一定是可复制的,当权值被随机初始化时。
例如,这里是Keras中Dense的默认构造函数参数:
init='glorot_uniform'但是,即使在尝试评估Keras优化的收敛性之前,我也建议尝试将从ffnet获得良好结果的权重移植到Keras模型中。您可以使用每个层的kwarg Dense(..., weights=(kwarg model.set_weights(...) )来完成,也可以在model.set_weights(...)的末尾执行全局操作。
使用相同的权重,必须在两个库之间产生完全相同的结果。除非遇到浮点四舍五入的问题。我相信,只要移植的权重不一致,优化工作就不太可能有帮助。
https://stackoverflow.com/questions/39993598
复制相似问题