2017-05-31 25 views
-1

次の行のトレースバックは「構文エラー」です。どうして? 私はそれを修正するために何をするのですか?このステートメントの何が問題なのですか?

w1=tf.Variable(tf.truncated_normal(shape=[3,3,1,20]) 
layer=tf.nn.conv2d(input=img,filter=w1,strides=[1,1,1,1],padding='SAME') 

「img」はグレースケール画像(np.array)、1x32x32x1です。

ただし、以下の行が完璧に動作します:

def new_w(shape): 
return tf.Variable(tf.truncated_normal(shape,stddev=0.05)) 

、その後:

w1=new_w(shape=[3,3,1,20]) 
    layer=tf.nn.conv2d(input=img,filter=w1,strides=[1,1,1,1],padding='SAME') 

私はラインも Aを得るために、セッション内で実行を意味する「完璧に」と言うとき層の数値。 2つの形式のステートメントの違いは何ですか?

答えて

0

あなたは、IMGは、グレースケール画像(私はnumpy.ndarrayに変換想像)であることを言っている間のドキュメントからhttps://www.tensorflow.org/api_docs/python/tf/nn/conv2d

入力は、tensorflow.Tensorでなければなりません。

イメージの値が定数のテンソル、またはプレースホルダーを作成し、プレースホルダーの値としてimgを供給する必要があります。

たとえば、次のように両方のケースで

constant_img = tf.constant(img, shape=img.shape, dtype=tf.float32) 
layer = tf.nn.conv2d(input=constant_img, filter=w1,strides=[1,1,1,1],padding='SAME') 

または

placeholder_img = tf.placeholder(dtype=tf.float32, shape=img.shape) 
layer = tf.nn.conv2d(input=placeholder_img, filter=w1,strides=[1,1,1,1],padding='SAME')  

あなたがどんな数値データは表示されませんので、層は、tf.Tensorになります。数値データを抽出するには、まずケース(定数)

layer_val = sess.run([layer]) 

秒ケース(プレースホルダ)

にいる間に、セッションを開き、

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 

ような何かを行うとする必要があります
layer_val = sess.run([layer], feed_dict={placeholder_img: img}) 
+0

ポイントがtf.conv2dの入力パラメータがtensorflow.Tensorでなければならないことではなく、numpy.ndarray –

+0

上記の私の変更を参照してください。 np.array上でもうまくいきます。私が書いたように、私はそれをチェックした。 2つのステートメントの唯一の違いは、フィルターの定義に基づいています。最初の行では関数の外で定義され、他の2つの行では関数なしで定義されます。 –

+0

tf.conv2dがperfectlを実行 –

関連する問題