Я хотел бы ввести тензор для 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
????