начальное состояние в dynamic_rnn как заполнитель - PullRequest
0 голосов
/ 16 ноября 2018

Я хотел бы ввести тензор для intial_state LSTM в качестве заполнителя, чтобы позже я сам назначил его значение в процессе обучения.

Я написал следующее:

import tensorflow as tf
class PGNetwork:
def __init__(self, inpsize, name='PGNetwork'):
    tf.reset_default_graph()
    self.inpsize = inpsize

    with tf.variable_scope(name):
        # We create the placeholders
        self.inputs_vec = tf.placeholder(tf.float32, [None, 
                            self.inpsize], name="inputs_vec")
        self.in_state = tf.placeholder(tf.float32, [1, 16], name="in_state")

        self.lstm_layer = tf.contrib.rnn.BasicLSTMCell(16,forget_bias=1)
#             self.in_state = self.lstm_layer.zero_state(1, dtype=tf.float32) # By uncommenting this line the error is no longer there.
        self.out_rnn, self.rnn_state = tf.nn.dynamic_rnn(self.lstm_layer, \
                                                      tf.expand_dims(self.inputs_vec, 1), initial_state=self.in_state)

        self.output = tf.layers.dense(inputs = self.out_rnn, 
                                       kernel_initializer=tf.contrib.layers.xavier_initializer(),
                                      units = 5, 
                                    activation=None, name="output")

        self.action_distribution = tf.nn.softmax(self.output, name="softmax")

PGNetwork = PGNetwork(8)

Я получаю эту ошибку: Tensor objects are not iterable when eager execution is not enabled. To iterate over this tensor use tf.map_fn.

Что на самом деле существует из-за initial_state в tf.nn.dynamic_rnn() с момента егоне принимается в качестве заполнителя.

Можно ли преобразовать заполнитель во что-то, принятое dynamic_rnn ????

...