请考虑以下数据:
t = 100
x = np.array(list(range(t))).reshape(1, t)
B = np.array([2,-2]).reshape(1,2)
y = x.T @ B + 10*np.vstack([np.sin(x), np.sin(x)]).T
x = x[0]
y = y.T
plt.clf()
plt.plot(x, y[0,:])
plt.plot(x, y[1,:])
我想拟合一个半参数模型,其中LSTM学习正弦波,线性回归学习每个时间序列的趋势。
y = x * b + LSTM(x)
(N, t, 1) (t,p)(p,N) (N, t, 1)
调换第一个词,我们得到:
y = (x * b).T + LSTM(x)
(N, t, 1) (N,t) (N, t, 1)
我如何在Keras中实现这一点?可能吗?我遇到了问题,因为x
的尺寸是固定的-这不是您要迷你批处理的。
同样,权重矩阵b
具有固定大小。 N
在我的问题中是不变的-世界上有固定数量的序列,而且永远不会有更多的序列。
如果我手动执行此操作,则渐变将具有非常明显的形式。但这还不清楚如何将它塞入Keras可以使用的东西中。
在编码方面有一个漏洞:
y = y.reshape(2,t,1)
x = x.reshape(1,t,1)
Linp = Input(shape = (100,1))
xinp = Input(shape = (100,1))
lstm = LSTM(1, return_sequences = True)(Linp)
XB = Dense(2, use_bias = False)(xinp)
rs = Lambda(lambda x: K.reshape(x, (2,100,1)))(XB)
added = add([rs, lstm])
m = Model([xinp, Linp], added)
m.summary()
m.compile(optimizer = "Adam", loss = "mean_squared_error")
m.fit([x,np.vstack([x,x])], y)
失败并显示错误
ValueError: All input arrays (x) should have the same number of samples. Got array shapes: [(1, 100, 1), (2, 100, 1)]