Tensorflow:在占位符中引入不同大小的矩阵
Posted
技术标签:
【中文标题】Tensorflow:在占位符中引入不同大小的矩阵【英文标题】:Tensorflow: introducing a matrix of different size in a placeholder 【发布时间】:2016-10-02 08:06:33 【问题描述】:我正在尝试使用矩阵乘法的张量流进行简单的操作,但我必须使用其列的可变大小的矩阵(如下例所示)
import tensorflow as tf
input1 = tf.placeholder("float", [None,None])
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print(sess.run([output], feed_dict=input1:[[1,2],[3,4,5]], input2:[2.]))
问题是,一旦我这样做了,我会收到一条错误消息告诉我:
ValueError: 使用序列设置数组元素。
我知道这很容易解决,在第一行添加任何数字或 None(以产生 mxn 形状),但是我想为实验训练更大的数据,我不确定 0 是否会影响数据或不是。
【问题讨论】:
如果你想让input2
也是一个矩阵,你应该写:input2 = tf.placeholder(tf.float32, [None, None])
谢谢,但实际上我不希望那个变成矩阵,我主要指的是 input1 的可变大小,目前 Tensorflow 无法轻松操作它,但无论如何谢谢。跨度>
【参考方案1】:
tf.placeholder()
操作为密集张量定义了一个占位符,因此您必须定义您尝试提供的值中的所有元素。
另一种方法(在最新版本的 TensorFlow 中,如果您从源代码构建或下载每晚发布的版本可用)是使用 tf.sparse_placeholder()
操作,它允许您使用 tf.SparseTensorValue
提供 tf.SparseTensor
。这允许您表示一个对象,其中并未定义所有元素,但未定义的元素被解释为零。
请注意,TensorFlow 对稀疏数据和可变大小示例的支持仍处于初步阶段,并且大多数操作(如 tf.mul()
)目前仅针对密集张量定义。我们用于可变大小图像数据的另一种方法是在input pipeline 中一次处理一个(可变大小)记录,然后将其转换为恒定形状,然后使用batching functions 制作一个单个密集批次。
【讨论】:
谢谢,这是我一直在寻找的一个很好的答案。您能否向我解释一下有关替代方法的更多信息?我认为工作会很酷以上是关于Tensorflow:在占位符中引入不同大小的矩阵的主要内容,如果未能解决你的问题,请参考以下文章