- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现了一个简单的神经网络框架,它仅支持多层感知器和简单的反向传播。对于线性分类和通常的 XOR 问题,它的效果还不错,但对于正弦函数逼近,结果并不那么令人满意。
我基本上试图用一个由 6-10 个神经元组成的隐藏层来近似正弦函数的一个周期。该网络使用双曲正切作为隐藏层的激活函数和输出的线性函数。结果仍然是对正弦波的相当粗略的估计,并且需要很长时间才能计算。
我查看了encog仅供引用,但即使如此,我也无法让它与简单的反向传播一起工作(通过切换到弹性传播,它开始变得更好,但仍然比提供的 super 光滑的 R 脚本 in this similar question 差得多)。那么我实际上是在尝试做一些不可能的事情吗?是否不可能用简单的反向传播来近似正弦(没有动量,没有动态学习率)? R中的神经网络库实际使用的方法是什么?
编辑:我知道即使使用简单的反向传播,绝对可能找到足够好的近似值(如果你对初始权重非常幸运),但我实际上更想知道这是否是一种可行的方法。与我的实现甚至 encog 的弹性传播相比,我链接的 R 脚本似乎收敛得非常快且稳健(在 40 个时期内,只有很少的学习样本)。我只是想知道是否可以做一些事情来改进我的反向传播算法以获得相同的性能,或者我是否必须研究一些更高级的学习方法?
最佳答案
使用 TensorFlow 等现代神经网络框架可以相当轻松地实现这一点。
例如,每层使用 100 个神经元的两层神经网络在我的计算机上只需几秒钟即可训练,并给出了很好的近似值:
代码也很简单:
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/
我写的函数有问题。想法是使用 taylor 展开而不是 js 数学对象来计算 sin 和 cosin 值(在 radians 上运行) .这些是方程式: sin(x) = (x^1)/1! - (x^
我不知道这是编程还是数学问题,但我整理了一些FFT的简短示例。我加载了440hz的波并在顶部添加了一些正弦波,但是由于某种原因,频谱中存在一个我不理解的“波”。 据我了解,频谱应该具有相同的| Y(f
这个问题在这里已经有了答案: Java Math.cos(Math.toRadians()) returns weird values (4 个答案) 关闭 10 年前。 我正在编写一个程序,我必须
我想在 ios4 中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); oper
我使用 256 个元素为 VHDL 制作了一个正弦 LUT。 我使用 MIDI 输入,因此值范围为 8.17Hz(注 #0)到 12543.85z(注 #127)。 我有另一个 LUT 计算必须发送到
我想在ios4中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); operan
我是一名优秀的程序员,十分优秀!