TensorFlow TPU |变量的初始化程序来自控制流构造

时间:2018-11-02 02:59:44

标签: python tensorflow tpu

我正在使用TensorFlow TPU训练模型,但是当我尝试使用tf.contrib.tpu.rewrite转换为与TPU兼容的代码时,出现错误:

  

ValueError:变量生成器/解码器/ layer4 / kernel /的初始化程序来自控制流结构内部,例如循环或条件。在循环或条件内创建变量时,请使用lambda作为初始化程序

我环顾四周,似乎通常是一个if语句或while循环导致错误。但是我没有这些。

现在,这是变量定义(内核):

def conv1d_transpose(input, filters, kernel_size, strides, activation=None):
  kernel = tf.Variable(tf.zeros(dtype=tf.float32, shape=[kernel_size, filters, input.shape[-1].value]), name='kernel')
  output_shape = [tf.shape(input)[0], strides * tf.shape(input)[1], filters]
  net = tf.contrib.nn.conv1d_transpose(input, filter=kernel, output_shape=output_shape, stride=strides, padding='SAME')
  net = activation(net)
  return net

我多次调用该函数。在模型函数中,调用如下所示:

  with tf.name_scope("layer4"):
    net = conv1d_transpose(
        net,
        filters=15,
        kernel_size=5,
        strides=2,
        activation=tf.nn.leaky_relu)
    net = tf.concat([net, conv4e], axis=-1)
    net = tf.layers.batch_normalization(net, training=training)

还有一件事,在引发错误之前,我从tpu.replicator得到了警告/错误:

  

[[{{node input1}} = TPUReplicatedInputN = 1,T = DT_BOOL]]   2018-11-02 02:55:44.242495:E tensorflow / core / common_runtime / executor.cc:630]执行程序无法创建内核。找不到:未注册与节点{{node input1}}兼容的CPU设备的'TPUReplicatedInput'OpKernel = TPUReplicatedInputN = 1,T = DT_BOOL       。已注册:

但是,由于它没有指定导致问题的节点的名称,因此很难调试。

谢谢。

0 个答案:

没有答案