Мне трудно использовать аргумент «начальное состояние» в функции tf.nn.rnn.
val, _ = tf.nn.rnn(cell1, newBatch, initial_state=stateP, dtype=tf.float32)
newBatch.shape => (1, 1, 11)
stateP.shape => (2, 2, 1, 11)
В общем, я прошел обучение своей нейросети LSTM и теперь хочу использовать ее значения. Как мне это сделать? Я знаю, что функция tf.nn.rnn() вернет состояние... но я не знаю, как ее подключить.
fyi stateP.shape => (2, 2, 1, 11) ..... может быть, потому что я использовал сложенные ячейки LSTM?
Я также пробовал:
val, _ = tf.nn.dynamic_rnn(stacked_lstm, newBatch, initial_state=stateP, dtype=tf.float32)
но я получаю сообщение об ошибке «AttributeError: объект NoneType не имеет атрибута 'op'».
Я почти уверен, что речь идет об объекте 'NoneType', это кортеж stateP, который я дал, но я не уверен что делать здесь.
EDIT: я, наконец, запустил это, используя:
init_state = cell.zero_state(batch_size, tf.float32)
Чтобы определить точную форму, мне нужно передать аргумент «initial_state». В моем случае это был НАБОР из 4 тензоров, каждый из которых имел форму (1, 11). Я сделал это так:
stateP0 = tf.convert_to_tensor(stateP[0][0])
stateP1 = tf.convert_to_tensor(stateP[0][1])
stateP2 = tf.convert_to_tensor(stateP[1][0])
stateP3 = tf.convert_to_tensor(stateP[1][1])
newStateP = stateP0, stateP1, stateP2, stateP3
Хорошо! Теперь функция tf.dynamic_rnn() работает, но каждый раз, когда я ее запускаю, она дает разные результаты... так какой смысл передавать ее в исходное состояние? Я хочу использовать состояние, которое я научился находить... и я не хочу, чтобы оно менялось. Я хочу реально использовать результаты своего обучения!