使用keras神经网络逼近具有多维输出的函数
Approximation of funtion with multi-dimensional output using a keras neural network
作为我研究项目的一部分,我想尝试使用 Keras 神经网络(我是全新的)来逼近一个函数 f:R^m -> R^n
。网络似乎正在学习到某些(确实不能令人满意的)点。但是网络的预测与预期结果一点都不相似。
我有两个包含训练数据(函数的 m 维输入)和训练标签(函数的 n 维预期输出)的 numpy 数组。我使用它们来训练我的 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% 的明显准确率。但是,当我使用 predict 方法时,网络的预测与预期结果一点也不相似。例如,预期输出的前十个条目是:
[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 能否以某种不透明的方式对结果进行归一化?我只是为我要解决的问题使用了错误的模型吗? 'accuracy' 到底是什么意思?
预先感谢您的帮助,我是神经网络的新手,已经被这个问题困扰好几天了。
问题出在这一行
outputs = Dense(n, activation='softmax')(hidden)
我们仅在分类问题中使用 softmax 激活,我们需要 类 上的概率分布作为网络的输出。因此 softmax make 确保输出总和为 1 且非零(在您的情况下是这样)。但我不认为你手头的问题是分类任务,你只是想预测十个连续的目标变量,所以改用 linear
激活函数。所以将上面的行修改成这样
outputs = Dense(n, activation='linear')(hidden)
希望对您有所帮助!
作为我研究项目的一部分,我想尝试使用 Keras 神经网络(我是全新的)来逼近一个函数 f:R^m -> R^n
。网络似乎正在学习到某些(确实不能令人满意的)点。但是网络的预测与预期结果一点都不相似。
我有两个包含训练数据(函数的 m 维输入)和训练标签(函数的 n 维预期输出)的 numpy 数组。我使用它们来训练我的 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% 的明显准确率。但是,当我使用 predict 方法时,网络的预测与预期结果一点也不相似。例如,预期输出的前十个条目是:
[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 能否以某种不透明的方式对结果进行归一化?我只是为我要解决的问题使用了错误的模型吗? 'accuracy' 到底是什么意思? 预先感谢您的帮助,我是神经网络的新手,已经被这个问题困扰好几天了。
问题出在这一行
outputs = Dense(n, activation='softmax')(hidden)
我们仅在分类问题中使用 softmax 激活,我们需要 类 上的概率分布作为网络的输出。因此 softmax make 确保输出总和为 1 且非零(在您的情况下是这样)。但我不认为你手头的问题是分类任务,你只是想预测十个连续的目标变量,所以改用 linear
激活函数。所以将上面的行修改成这样
outputs = Dense(n, activation='linear')(hidden)
希望对您有所帮助!