【发布时间】:2017-10-26 22:08:39
【问题描述】:
我目前正在使用 Tensorflow 构建深度神经网络,但在实施称为 dropout 的正则化技术时遇到了一些问题(查看 Geoffrey Hinton here 的原始论文)。
Tensorflow 有一个功能可以解决这个问题,我正在学习 Aurelien Geron 的书Hands-On Machine Learning with Scikit-Learn & Tensorflow 的教程(顺便说一下,它是极好的)。在其中,他实现 dropout 的示例代码包括声明一个 training 占位符:
training = tf.placeholder(tf.float32, shape = (), name = "training")
然后创建隐藏层dropout对象:
hidden1_drop = tf.layers.dropout(hidden1, dropout_rate, training = training)
但是,当我执行此操作时,我收到指向上述行的错误。
TypeError: Input 'pred' of 'Switch' Op has type float32 that does not match expected type of bool
我查看了Tensorflow documentation regarding dropout,tf.layers.dropout()方法的training参数定义为
Python 布尔值或 TensorFlow 布尔标量张量(例如 占位符)。是否在训练模式下返回输出(应用 dropout)或推理模式(返回未触及的输入)。
但是,在上面的代码中,我显然传入了tf.float32。我怀疑这是我的错误的原因 - 它甚至在错误消息本身中说明。那么这只是作者的一个错字,还是我不明白幕后发生了什么?
我应该只用这一行替换隐藏层声明吗?
hidden1_drop = tf.layers.dropout(hidden1, dropout_rate, training = True)
我还查看了其他 SO posts with similar errors,例如这个,但答案似乎表明错误源于过时的 Tensorflow 版本,事实并非如此——我最近才在我的机器上安装了一个几周前。
【问题讨论】:
标签: python tensorflow data-science