我只想测试神经网络近似乘法函数(回归任务)有多好。 我正在使用Azure Machine Learning Studio。我有6500个样本,1个隐藏层 (我已经测试了每个隐藏层5/30/100个神经元),没有标准化。和默认参数 Learning rate - 0.005, Number of learning iterations - 200, The initial learning weigh - 0.1, The momentum - 0 [description]。我的准确度极差,接近于0。 同时提升决策森林回归显示非常好的近似值。
我做错了什么?对于NN来说,这项任务应该非常简单。
答案 0 :(得分:3)
要检查的一些事项:
答案 1 :(得分:3)
大乘法函数梯度迫使网可能几乎立即进入一些恐怖状态,其中所有隐藏节点都具有零梯度。 我们可以使用两种方法:
1)保持不变。我们只是在学习之前将所有内容都分开并在之后成倍增加。
2)进行日志规范化。它使乘法成为另外的:
m = x*y => ln(m) = ln(x) + ln(y).
答案 2 :(得分:1)
这是我与神经网络相乘的方法:
import numpy as np
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Dense(150, activation='relu', input_shape=(2,)))
model.add(layers.Dense(1, activation='relu'))
data = np.random.random((10000, 2))
results = np.asarray([a * b for a, b in data])
model.compile(optimizer='sgd', loss='mae')
model.fit(data, results, epochs=1, batch_size=1)
model.predict([[0.8, 0.5]])
有效。
答案 3 :(得分:0)
m = x * y => ln(m)= ln(x)+ ln(y),但仅当x,y> 0 强>
答案 4 :(得分:0)
“两种方法:除以常数,或对数进行归一化”
我尝试了两种方法。当然,日志规范化是可行的,因为正如您正确指出的那样,它强制执行加法的实现。在我的广泛测试中,除以常数(或类似地在任何范围内进行归一化)似乎并不成功。
对数方法很好,但是如果您有两个具有一组输入和目标y值的数据集,则:
在一个数据集中,目标始终是两个输入的总和
在两个数据集中,目标始终是两个输入的乘积
然后我不清楚如何设计一个神经网络,它将使用反向传播在两个数据集中找到目标y。如果这不可能,那么我发现神经网络发现“任何函数的近似值”的能力令人惊讶。但是我是这个游戏的新手,我的期望可能不切实际。
答案 5 :(得分:0)
这是使用一个隐藏层近似乘法函数的一种方法。它在隐藏层中使用了S形激活,并且在达到一定范围的数字之前效果很好。这是gist link