2016-10-14 130 views
2

我尝试使用动态形状创建tf.Variable。以下概述了这个问题。Tensorflow无法初始化动态批量大小的tf.Variable

这样做有效。

init_bias = tf.random_uniform(shape=[self.config.hidden_layer_size, tf.shape(self.question_inputs)[0]]) 

然而,当我尝试这样做:

init_bias = tf.Variable(init_bias) 

它引发错误ValueError异常:initial_value必须指定的形状:张量( “random_uniform:0”,形状=(?,? ),D型细胞= FLOAT32)

刚出来上下文(问题输入是一个占位符,其动态批次):

self.question_inputs = tf.placeholder(tf.int32, shape=[None, self.config.qmax]) 

似乎将动态值放入随机均匀区域给出的形状=(?,?),这会给tf.Variable带来误差。

谢谢,感谢任何帮助!

回答

0

这应该工作:

init_bias = tf.Variable(init_bias,validate_shape=False) 

如果validate_shape是假,tensorflow允许变量与未知形状的值进行初始化。

但是,你对我的做法似乎有点奇怪。在张量流中,变量通常用于存储神经网络的权重,其形状保持固定,与批量大小无关。通过将可变长度张量传递给图形(并将其与固定形状偏差变量相乘/相加)来处理变量批量大小。

+1

我在预加载数据时发现了一个用例:https://www.tensorflow.org/programmers_guide/reading_data#preloaded_data。您可能想要提供不同大小的不同数据集。 –

+0

我仍然收到一个错误'InvalidArgumentError(请参阅上面的回溯):您必须为占位符张量提供一个值,使用dtype int32 [[节点:占位符=占位符[dtype = DT_INT32,shape = [],device =“/作业:本地主机/副本:0 /任务:0 /设备:CPU:0“]()]] ' –