学习罪恶功能

时间:2018-06-28 22:01:15

标签: machine-learning neural-network keras

我是机器学习的新手 我正在建立一个简单的模型,可以预测简单的SELECT ROUND(SUM(a.coins),2) AS money FROM m_z_analytics a, m_b_browsing_live b WHERE b.id = a.site_id; 函数

我生成了一些sin值,并将其输入到我的模型中。

sin

然后我生成一些测试数据,这些数据覆盖了我的学习数据,但同时也引入了一些新数据

from math import sin

xs = np.arange(-10, 40, 0.1)
squarer = lambda t: sin(t)
vfunc = np.vectorize(squarer)
ys = vfunc(xs)

model= Sequential()
model.add(Dense(units=256, input_shape=(1,), activation="tanh"))
model.add(Dense(units=256, activation="tanh"))
..a number of layers here
model.add(Dense(units=256, activation="tanh"))
model.add(Dense(units=1))
model.compile(optimizer="sgd", loss="mse")
model.fit(xs, ys, epochs=500, verbose=0)

预测数据和学习数据如下。我添加的层越多,可以学习的曲线网络就越多,但是训练过程会增加。 有没有一种方法可以预测任意数量的曲线test_xs = np.arange(-15, 45, 0.01) test_ys = model.predict(test_xs) plt.plot(xs, ys) plt.plot(test_xs, test_ys) ?优选地,具有少量的层。 enter image description here

1 个答案:

答案 0 :(得分:6)

使用完全连接的网络,我想您将无法获得任意长的序列,但是使用RNN,看来人们已经做到了。谷歌搜索将弹出许多这样的工作,我很快发现了这一点:http://goelhardik.github.io/2016/05/25/lstm-sine-wave/

RNN根据输入的历史来学习序列,因此它旨在拾取这些类型的模式。

我怀疑您观察到的限制类似于执行多项式拟合。如果增加多项式的阶数,则可以更好地拟合这样的函数,但是多项式只能表示固定数量的拐点,具体取决于您选择的阶数。您的观察在这里看起来是一样的。随着增加图层,您将添加更多的非线性过渡。但是,您受到在全连接网络中选择作为体系结构的固定层数的限制。

RNN不能在相同的原理上工作,因为它维护一个状态,并且可以利用序列中向前传递的状态来学习正弦波单个周期的模式,然后根据该模式重复该模式。状态信息。

相关问题