python - 使用不同的人工神经网络框架(ffnet、tensorflow)复制结果

标签 python neural-network tensorflow keras

我正在尝试使用人工神经网络对技术流程(许多非线性方程)进行建模。该函数有多个输入和多个输出(例如 50 个输入,150 个输出 - 均为 float )。

我已经尝试过python library 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 + 输出向量的大小)和一个输出层。我正在使用 scipy 共轭梯度优化器。

ffnet 的缺点是训练时间长且缺乏使用 GPU 的功能。因此,我想切换到不同的框架,并选择带有 TensorFlow 的 keras 作为后端。

我尝试对以前的配置进行建模:

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

然而,结果要差得多,经过几千 (!) 个 epoch 的训练,误差高达 0.5%。 ffnet 训练在 292 个 epoch 时自动取消。此外,网络响应和验证目标之间的差异并不以 0 为中心,而是大多为负值。 我已经尝试了所有优化器和不同的损失函数。我还跳过了 BatchNormalization 并以与 ffnet 相同的方式手动标准化数据。没有任何帮助。

有人有关于使用 keras 获得更好结果的建议吗?

最佳答案

我知道您正在尝试使用不同的库从头开始重新训练相同的架构。这里要记住的第一个基本问题是神经网络 are not necessarily reproducible ,当权重随机初始化时。

例如,以下是 Keras 中 Dense 的默认构造函数参数:

init='glorot_uniform'

但即使在尝试评估 Keras 优化的收敛性之前,我也建议尝试将您获得良好结果的权重从 ffnet 移植到您的 Keras 模型中。您可以使用每层的 kwarg Dense(..., Weights=) 来执行此操作,也可以在末尾进行全局 model.set_weights(... )

使用相同的权重必须在两个库之间产生完全相同的结果。除非您遇到一些浮点舍入问题。我相信,只要移植的权重不一致,进行优化就不太可能有帮助。

关于python - 使用不同的人工神经网络框架(ffnet、tensorflow)复制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993598/

相关文章:

python - 如何在 "no module named xyz"错误上获得更多诊断输出?

tensorflow 错误: Failed to convert object of type <class 'dict' > to Tensor

python - Tensorflow获取原始框架而不是边界框绘制框架

machine-learning - Pytorch 中的预期双张量(获得浮点张量)

python - 使用 tf.Variable() 和 tf.get_variable() 时的不同结果

python - 返回 Keras 中 RNN 中跨时间步长的所有状态

python - 如何从yahoo finance获取最大历史价格数据?

python - 我如何修复 "Couldn' 并在掌握 Plone 训练中找到 'ploneconf.site' 的分布

python - 从 lambda 连接到 Redshift 并使用 python 获取一些记录

python - Keras:简单数据的简单神经网络不起作用