我想训练一个不同数组大小的数据。例如,我们假设我们希望训练句子。第一句是“我是约翰”,第二句是“我知道”。如果句子转换成张量。第一件事将变成[“我”,“我”,“约翰”],接下来将是[“我”,“知道”]。因此,第一个数组将需要3作为占位符形状的n_input。但是,第二个阵列需要2个。
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
我需要上面的代码来定义占位符。但是,我无法确定n_input。
此外,形状中没有什么意思? BATCH_SIZE? 请帮帮我。
答案 0 :(得分:9)
从技术上讲,占位符根本不需要形状。它可以这样定义。
x =tf.placeholder(tf.float32, shape=[])
在这种情况下,占位符本身没有形状信息。如果您知道张量的尺寸但不知道它的实际数字形状,我们将该尺寸的数值替换为无,因为它可以具有可变尺寸。
x =tf.placeholder(tf.float32, shape=[None, None, None])
这会影响一些下游静态形状分析,张量流可以获得形状信息,但是它仍然可以按预期工作。
答案 1 :(得分:1)
在像你这样的场景中,我们通常将第二个维度(time_steps或输入长度)设为常数,比如句子的最大长度,并且空格直接用填充或零填充。然后,您可以将占位符设置为:
x = tf.placeholder(tf.int32, [None, max_input_steps])
y = tf.placeholder(tf.int32, [None, nax_output_steps])