gpt4 book ai didi

machine-learning - 用神经网络逼近正弦函数

转载 作者:行者123 更新时间:2023-11-30 08:21:41 26 4
gpt4 key购买 nike

我实现了一个简单的神经网络框架,它仅支持多层感知器和简单的反向传播。对于线性分类和通常的 XOR 问题,它的效果还不错,但对于正弦函数逼近,结果并不那么令人满意。

我基本上试图用一个由 6-10 个神经元组成的隐藏层来近似正弦函数的一个周期。该网络使用双曲正切作为隐藏层的激活函数和输出的线性函数。结果仍然是对正弦波的相当粗略的估计,并且需要很长时间才能计算。

我查看了encog仅供引用,但即使如此,我也无法让它与简单的反向传播一起工作(通过切换到弹性传播,它开始变得更好,但仍然比提供的 super 光滑的 R 脚本 in this similar question 差得多)。那么我实际上是在尝试做一些不可能的事情吗?是否不可能用简单的反向传播来近似正弦(没有动量,没有动态学习率)? R中的神经网络库实际使用的方法是什么?

编辑:我知道即使使用简单的反向传播,绝对可能找到足够好的近似值(如果你对初始权重非常幸运),但我实际上更想知道这是否是一种可行的方法。与我的实现甚至 encog 的弹性传播相比,我链接的 R 脚本似乎收敛得非常快且稳健(在 40 个时期内,只有很少的学习样本)。我只是想知道是否可以做一些事情来改进我的反向传播算法以获得相同的性能,或者我是否必须研究一些更高级的学习方法?

最佳答案

使用 TensorFlow 等现代神经网络框架可以相当轻松地实现这一点。

例如,每层使用 100 个神经元的两层神经网络在我的计算机上只需几秒钟即可训练,并给出了很好的近似值:

enter image description here

代码也很简单:

import tensorflow as tf
import numpy as np

with tf.name_scope('placeholders'):
x = tf.placeholder('float', [None, 1])
y = tf.placeholder('float', [None, 1])

with tf.name_scope('neural_network'):
x1 = tf.contrib.layers.fully_connected(x, 100)
x2 = tf.contrib.layers.fully_connected(x1, 100)
result = tf.contrib.layers.fully_connected(x2, 1,
activation_fn=None)

loss = tf.nn.l2_loss(result - y)

with tf.name_scope('optimizer'):
train_op = tf.train.AdamOptimizer().minimize(loss)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

# Train the network
for i in range(10000):
xpts = np.random.rand(100) * 10
ypts = np.sin(xpts)

_, loss_result = sess.run([train_op, loss],
feed_dict={x: xpts[:, None],
y: ypts[:, None]})

print('iteration {}, loss={}'.format(i, loss_result))

关于machine-learning - 用神经网络逼近正弦函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com