我正在定义一个由在tensorflow中实现的批处理规范化组成的体系结构
我并不是在讨论整个体系结构,只是展示了问题的相关部分
self.w3 = tf.layers.Dense(self.hidden_dimension)
// code
h = tf.layers.dropout(tf.layers.batch_normalization(tf.nn.sigmoid(self.w3(x)),
training = self.is_training, renorm = True), rate = 0.15, training = self.is_training)
// code
批量标准化的官方tensorflow实现称“更新操作被放置在tf.GraphKeys.update_ops中,因此它们需要与列操作一起执行。”
现在,当我不使用
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
self.optimize = tf.group([self.opt, update_ops])
培训继续正常进行,没有错误。但是,我知道这里没有执行批处理规范化
但一旦引入这两条线,就会出现意外错误
You must feed a value for placeholder tensor
有趣的是,每次我尝试执行此函数时,上述错误都会因不同的占位符而不断变化,并且不会固定到特定的占位符。但是,我确信我已经为所有占位符提供了值(正如我已经提到的,当这两行不存在时,培训可以很好地工作)
以防你想看到损失和优化功能
with tf.variable_scope(name_or_scope = 'op', reuse = tf.AUTO_REUSE) as scope:
self.cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = self.p_y,
labels = self.ans))
self.optimizer = tf.train.AdadeltaOptimizer(learning_rate=self.learning_rate)
gradients, variables = zip(*self.optimizer.compute_gradients(self.cost))
gradients, _ = tf.clip_by_global_norm(gradients, self.clip_rate)
self.opt = self.optimizer.apply_gradients(zip(gradients, variables))
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
self.optimize = tf.group([self.opt, update_ops])
目前没有回答
相关问题 更多 >
编程相关推荐