keras可以处理特定于序列的参数吗?

时间:2019-04-10 17:25:25

标签: python tensorflow keras statistics recurrent-neural-network

请考虑以下数据:

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,:])

enter image description here

我想拟合一个半参数模型,其中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)]

0 个答案:

没有答案