Tensorflow中RNN的batche方法对我来说并不清楚。例如tf.nn.rnn作为张量的输入列表[BATCH_SIZE x INPUT_SIZE]。我们通常会提供会话批次的数据,那么为什么它采用批次列表而不是单批次?
这导致我的下一个困惑:
data = []
for _ in range(0, len(train_input)):
data.append(tf.placeholder(tf.float32, [CONST_BATCH_SIZE, CONST_INPUT_SIZE]))
lstm = tf.nn.rnn_cell.BasicLSTMCell(CONST_NUM_OF_HIDDEN_STATES)
val, state = tf.nn.rnn(lstm, data, dtype=tf.float32)
我将张量列表[CONST_BATCH_SIZE x CONST_INPUT_OTPUT_SIZE]传递给tf.nn.rnn
,得到的输出值是张量列表[CONST_BATCH_SIZE x CONST_NUM_OF_HIDDEN_STATES]。现在我想对所有HIDDEN_STATES输出使用softmax,需要用matmaul + bias计算权重
我应该用于matmul:
weight = tf.Variable(tf.zeros([CONST_NUM_OF_HIDDEN_STATES, CONST_OTPUT_SIZE]))
for i in val:
mult = tf.matmul(i, weight)
bias = tf.Variable(tf.zeros([CONST_OTPUT_SIZE]))
prediction = tf.nn.softmax(mult + bias)
或者我应该从val
创建2D数组,然后在没有tf.matmul
的情况下使用for
吗?
答案 0 :(得分:0)
这应该有效。输出是来自RNN的批量数据。对于所有批输入,probs都有概率。
logits = tf.matmul(output, softmax_w) + softmax_b
probs = tf.nn.softmax(logits)