对于动态批量大小,Tensorflow无法初始化tf.Variable

op1*_*no4 6 tensorflow

我尝试用动态形状创建一个tf.Variable.以下概述了该问题.

这样做有效.

init_bias = tf.random_uniform(shape=[self.config.hidden_layer_size, tf.shape(self.question_inputs)[0]])
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时:

init_bias = tf.Variable(init_bias)
Run Code Online (Sandbox Code Playgroud)

它抛出错误ValueError:initial_value必须具有指定的形状:Tensor("random_uniform:0",shape =(?,?),dtype = float32)

刚来上下文(问题输入是动态批处理的占位符):

self.question_inputs = tf.placeholder(tf.int32, shape=[None, self.config.qmax])
Run Code Online (Sandbox Code Playgroud)

似乎将动态值置于随机均匀中给出shape =(?,?),这给出了tf.Variable的错误.

谢谢,感谢任何帮助!

use*_*170 9

这应该工作:

init_bias = tf.Variable(init_bias,validate_shape=False)
Run Code Online (Sandbox Code Playgroud)

如果validate_shape为False,则tensorflow允许使用未知形状的值初始化变量.

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

  • 我仍然得到一个错误`InvalidArgumentError(参见上述用于回溯):必须喂为占位符张量"占位符"的值与D型细胞INT32 [[节点:占位符=占位符[D型细胞= DT_INT32,形状= [],设备="/工作:localhost/replica:0/task:0/device:CPU:0"]()]]` (7认同)