使用keras神经网络的多维输出逼近函数

时间:2019-06-26 14:16:26

标签: python keras neural-network deep-learning approximation

作为我研究项目的一部分,我想尝试使用Keras神经网络(这是我的新手)对函数f:R^m -> R^n进行近似。网络似乎正在学习(确实不令人满意)一点。但是对网络的预测丝毫不像预期的结果。

我有两个numpy数组,分别包含训练数据(函数的m维输入)和训练标签(函数的n维预期输出)。我使用它们来训练我的Keras模型(见下文),该模型似乎正在学习所提供的数据。

inputs = Input(shape=(m,))
hidden = Dense(100, activation='sigmoid')(inputs)
hidden = Dense(80, activation='sigmoid')(hidden)
outputs = Dense(n, activation='softmax')(hidden)

opti = tf.keras.optimizers.Adam(lr=0.001)

model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=opti,
             loss='poisson',
             metrics=['accuracy'])

model.fit(training_data, training_labels, verbose = 2, batch_size=32, epochs=30)

当我使用一组测试数据和一组测试标签调用模型上的评估方法时,我得到的表观准确性超过50%。但是,当我使用预测方法时,网络的预测丝毫不类似于预期结果。例如,预期输出的前十个条目是:

  

[0。,0.08193582,0.13141066,0.13495408,0.16852582,0.2154705,   0.30517559、0.32567417、0.34073457、0.37453226]

而预测结果的前十个条目是:

  

[3.09514281e-09,2.20849714e-03,3.84095078e-03,4.99367528e-03,
  6.06226595e-03,7.18442770e-03,8.96730460e-03,1.03423093e-02,1.16029680e-02,1.31887039e-02]

这与我使用的指标有关吗? Keras是否可以某种不透明的方式对结果进行归一化?我刚刚使用了错误的模型来解决我要解决的问题吗?无论如何,“准确性”是什么意思? 预先感谢您的帮助,我是神经网络的新手,已经被困扰了几天了。

1 个答案:

答案 0 :(得分:2)

问题出在这行

outputs = Dense(n, activation='softmax')(hidden)

我们仅在分类问题中使用softmax激活,在分类问题中,我们需要在类上进行概率分布作为网络的输出。因此,softmax make可以确保输出的总和为1且不为零(在您的情况下确实如此)。但我认为您面临的问题不是分类任务,您只是在尝试预测十个连续目标变量,因此请使用linear激活函数。因此,将上面的行修改为类似

outputs = Dense(n, activation='linear')(hidden)

希望这会有所帮助!