【问题标题】:RNN & Batches in TensorflowTensorflow 中的 RNN 和批处理
【发布时间】:2016-08-11 08:00:50
【问题描述】:

我不清楚 Tensorflow 中 RNN 的批处理方法。例如 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 + 偏差计算权重

我应该使用 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 创建二维数组,然后在不使用for 的情况下使用tf.matmul

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    这应该可以。输出是来自 RNN 的批处理数据。对于所有的批输入 probs 都会有概率。

    logits = tf.matmul(output, softmax_w) + softmax_b
    probs = tf.nn.softmax(logits)
    

    【讨论】:

    • RNN 的输出是 3D(2d 列表),softmax_w 是 2D,这就是问题所在:我应该分批迭代还是从 3D 创建 2D 数组作为输出
    • 你能不能把那些维度举例写下来,很容易理解
    猜你喜欢
    • 2018-03-20
    • 2017-01-22
    • 1970-01-01
    • 2017-05-01
    • 2016-12-27
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多