2017-10-26 2 views
0

現在、Tensorflowを使用してディープニューラルネットワークを構築しています。 (元の論文を参照してくださいジェフリーヒントンhere)。Tensorflow TypeError: 'Switch'の 'pred'を入力すると、boolの予想されるタイプと一致しないfloat32型が返される

Tensorflowは、このの世話をする機能を有している、と私はオーレリアンジェロンの本(途中で、信じられないほどである、)Scikit-学び& Tensorflowとハンズオン機械学習によるチュートリアルを次のようです。その中に、ドロップアウトを実現するために彼のサンプルコードはtrainingプレースホルダを宣言から構成:次に

training = tf.placeholder(tf.float32, shape =(), name = "training") 

及び隠れ層ドロップアウトオブジェクトを作成する:

hidden1_drop = tf.layers.dropout(hidden1, dropout_rate, training = training) 

私はこれを実行するときしかし、私はエラーを受け取ります上記の行を指しています。私はTensorflow documentation regarding dropoutに見えた

TypeError: Input 'pred' of 'Switch' Op has type float32 that does not match expected type of bool 

は、tf.layers.dropout()方法のtrainingパラメータは

Either a Python boolean, or a TensorFlow boolean scalar tensor (e.g. a placeholder). Whether to return the output in training mode (apply dropout) or in inference mode (return the input untouched).

として定義されているが、上記のコードでは、私ははっきりtf.float32に渡しています。私はこれが私のエラーの原因だと思っています。エラーメッセージそのものにも述べられています。これは単に作者の誤植だったのでしょうか、私は何が起こっているのかを理解していませんか?

代わりに、隠しレイヤー宣言をこの行で置き換えるべきですか?

hidden1_drop = tf.layers.dropout(hidden1, dropout_rate, training = True) 

私も、このように、他のSO posts with similar errorsに見てきたが、答えは、私はごく最近の私の上に設置大文字されていない、エラーがTensorflowの古いバージョンに由来することを示唆しているように見えます数週間前にマシンを起動します。

答えて

0

私はばかだから私は自分の質問に答えるつもりです。

著者は誤植をしていませんでした。私はチュートリアルの後にタイプミスをしました。 trainingは、Pythonブール値またはTensorflowブールテンソルのいずれかになります。この本では、著者の実際のコードは

training = tf.placeholder_with_default(False, shape=()) 

となりました。このスイッチで問題を解決する必要があります。

関連する問題