Может ли keras обрабатывать специфичные для последовательности параметры? - PullRequest
0 голосов
/ 10 апреля 2019

Рассмотрим следующие данные:

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)

Как я могу реализовать это в Керасе?Является ли это возможным?Я сталкиваюсь с проблемами, потому что x имеет фиксированное измерение - это не то, что вы бы взяли мини-партии.
Аналогично, весовая матрица b имеет фиксированный размер.N постоянно в моей задаче - в мире есть фиксированное количество последовательностей, и их больше никогда не будет.

Если бы я делал это вручную, была бы очень очевидная форма градиентов.Но не совсем понятно, как вставить это во что-то, с чем может работать Керас.

Вот ошибка при кодировании:

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)]
...