Я пытаюсь построить RNN в Керасе. Я не совсем понимаю требуемый формат ввода. Я могу построить плотные сети без проблем, но я думаю, что слои RNN ожидают входное измерение х пакет х шаг по времени? Кто-нибудь может это проверить?
Вот код, который я хотел бы обновить:
Оригинальный код:
def get_generative(G_in, dense_dim=200, out_dim=50, lr=1e-3):
x = Dense(dense_dim)(G_in)
x = Activation('tanh')(x)
G_out = Dense(out_dim, activation='tanh')(x)
G = Model(G_in, G_out)
opt = SGD(lr=lr)
G.compile(loss='binary_crossentropy', optimizer=opt)
return G, G_out
G_in = Input(shape=[10])
G, G_out = get_generative(G_in)
G.summary()
Модифицировано со слоями GRU и некоторыми немного другими размерами:
def get_generative(G_in, dense_dim=10, out_dim=37, lr=1e-3):
clear_session()
x = GRU(dense_dim, activation='tanh',return_state=True)(G_in)
G_out = GRU(out_dim, return_state=True)(x)
G = Model(G_in, G_out)
opt = SGD(lr=lr)
G.compile(loss='binary_crossentropy', optimizer=opt)
return G, G_out
G_in = Input(shape=(None,3))
G, G_out = get_generative(G_in)
G.summary()
Ошибка, которую я вижу в этом коде: ValueError: Tensor ("gru_1 / strided_slice: 0", shape = (3, 10), dtype = float32) должен быть из того же графика, что и Tensor ("strided_slice_1: 0 ", shape = (?, 3), dtype = float32).
Если я удаляю «None» выше, я получаю: ValueError: Вход 0 несовместим со слоем gru_1: ожидаемый ndim = 3, найденный ndim = 2
Здесь может быть полезно любое объяснение.