Использование return_sequences в recurrentshop

Я пытаюсь написать собственный повторяющийся слой, используя магазин в Keras. Входные данные представляют собой последовательность «временных шагов» длины, а выходные данные должны быть последовательностью всех выходных временных шагов, поэтому я использую return_sequences=True.

Рекуррентная модель имеет два входа, один из которых повторяется с последнего временного шага. Я использую этот слой, аналогичный пример магазина, но продолжаю получать сообщения об ошибках: «Вы должны передать значение для тензора заполнителя 'input_2' с помощью dtype float». Что я делаю неправильно? Полный код приведен ниже:

import keras.backend as K
from recurrentshop import RecurrentModel
import numpy as np
from keras.models import Model
from keras.layers import Dense, Reshape, Conv1D, Input, Lambda, concatenate
from keras.optimizers import Adam

# parameters:
timesteps = 35
output_dim = 315
input_dim = 10
batch_size = 100

# recurrent layer definition:
def myRNN(input_dim,output_dim):
    inp = Input((input_dim,))
    h_tm1 = Input((output_dim,))
    modified_h = Lambda(lambda x: x * K.sum(K.square(inp)))(h_tm1)
    modified_inp = Dense(output_dim, use_bias=False, activation='tanh')(inp)
    modified_inp = Reshape((output_dim,1))(modified_inp)
    modified_inp = Conv1D(128, 7, padding='same', activation='tanh', use_bias=False)(modified_inp)
    modified_inp = Lambda(lambda x: K.sum(x, axis=-1))(modified_inp)
    hid = concatenate([modified_h, modified_inp], axis=-1)
    h_t = Dense(output_dim, use_bias=False, activation='tanh')(hid)  
    return RecurrentModel(input=inp, output=h_t, initial_states=h_tm1, final_states=h_t,
                          return_sequences=True, state_initializer=['zeros'])

# building the model:
inp = Input((timesteps, input_dim))
temp = myRNN(input_dim,output_dim)(inp)
out = Reshape((timesteps*output_dim,1))(temp)
model = Model(inputs=inp, outputs=out)
model.compile(loss='mse', optimizer='adam')

# testing the model:
inp = np.random.rand(batch_size ,timesteps ,input_dim)
prediction = model.predict(inp)
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, проблема была в слое лямбда:

modified_h = Lambda(lambda x: x * K.sum(K.square(inp)))(h_tm1)

Это было решено определением функции:

def factored_h(arg):
    norm = K.sum(K.square(arg[0]))
    return arg[1]*norm

и перефразируя слой лямбда следующим образом:

modified_h =Lambda(factored_h)([inp, h_tm1])

Υ вы можете принять свой ответ, если он работает, вы знаете. Таким образом вы можете сообщить другим, что существует реальное рабочее решение.

Eypros 22.02.2019 08:46

Другие вопросы по теме