gpt4 book ai didi

python - 如何在没有固定 batch_size 的情况下设置 Tensorflow dynamic_rnn、zero_state?

转载 作者:太空狗 更新时间:2023-10-29 21:30:35 24 4
gpt4 key购买 nike

根据Tensorflow官网,(https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/BasicLSTMCell#zero_state)zero_state 必须指定 batch_size。我发现很多例子都使用了这段代码:

    init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32)

outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in,
initial_state=init_state, time_major=False)

对于训练步骤,固定batch size是可以的。但是,在进行预测时,测试集的形状可能与训练集的批量大小不同。例如,我的一批训练数据的形状为 [100, 255, 128]。批量大小为 100,具有 255 个步骤和 128 个输入。而测试集是 [2000, 255, 128]。我无法预测,因为在 dynamic_rnn(initial_state) 中,它已经设置了一个固定的 batch_size = 100。我该如何解决这个问题?

谢谢。

最佳答案

您可以将 batch_size 指定为占位符,而不是常量。只需确保在 feed_dict 中提供相关数字,这对于训练和测试是不同的

重要的是,指定 [] 作为占位符的维度,因为如果指定 None 可能会出错,这是其他地方的惯例。所以这样的事情应该有效:

batch_size = tf.placeholder(tf.int32, [], name='batch_size')
init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32)
outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in,
initial_state=init_state, time_major=False)
# rest of your code
out = sess.run(outputs, feed_dict={batch_size:100})
out = sess.run(outputs, feed_dict={batch_size:10})

显然要确保批处理参数与输入的形状相匹配,dynamic_rnn 将解释为 [batch_size, seq_len, features][seq_len, batch_size, features] 如果 time_major 设置为 True

关于python - 如何在没有固定 batch_size 的情况下设置 Tensorflow dynamic_rnn、zero_state?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com