2017-04-26 14 views
1

TensorFlow MNISTの例を変更しようとしています。その結果を生成する前に、プレースホルダーの入力値が操作のために変数に渡されます。例えばTensorflow - プレースホルダーの値を変数に割り当てる

:上記の例で

import tensorflow as tf 

# create placeholder/weights/biases 
input_x = tf.placeholder(tf.float32, [None, 784]) 
input_W = tf.Variable(tf.zeros([784, 10])) 
input_b = tf.Variable(tf.zeros([10])) 

# Create the new variable 
var_x = tf.Variable(tf.zeros([784]), trainable=False) 

# Perform an arbitrary manipulation on MNIST input, and assign to var_x 
for i in range(0,784): 
    var_x[i].assign(input_x[i]/2) 

input_Y = tf.matmul(var_x, input_W) + input_b 

、私は、出力結果を得るために重みを掛ける前に、値を任意の操作を行うことができるvar_Xへinput_Xプレースホルダの値を渡しています。私はtf.matmulに次のエラー取得しています

tf.matmul(input_x, input_W) + input_b 

をしかし、これはそうではない:

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [784], [784,10]. 

を私は混乱している理由は、上記の例では、これは動作します:

tf.matmul(var_x, input_W) _ input_b 

input_xとvar_xの両方が784長さベクトルである必要があります。

私は基本的には、通常のMNISTの例では、プレースホルダーではなく変数を使用するのとまったく同じ行列乗算をしたいと考えています。

私はTensorFlowを初めて使い慣れているようですが、多くのチュートリアル/ SOの質問を読んでいるにもかかわらず、私はこの特定のシナリオをどこにも見たことがありません。

ご協力いただきありがとうございます。

答えて

0

input_xとvar_xの両方が784長さベクトルである必要があります。

これは正確ではありません。 Input_xの形状は[None、784]で、var_xの形状は[784]です。

残念ながら、私は正確にあなたがやろうとしているものを見ていない...

私は基本的にそれはあなたが通常のMNIST例ではあるんだけど、全く同じマトリックス乗算になりたいが、使用してプレースホルダではなく変数です。もし

...応答のための

+0

感謝をプレースホルダではなく変数を使用したい場合は、

input_x = tf.Variable(tf.float32, preloaded_digits_numpy_array) 

を言うことができ、それがあるようなコードの残りの部分を残して、申し訳ありませんそれは明らかではなかった。私は、通常のようにプレースホルダに数字をロードしたいが、結果を計算する前に値を操作する必要がある。 – inkbleed

+0

申し訳ありませんが、私のコメントは切り捨てられます。 私は次のものを追加したいと思います: 上記の例では、プレースホルダに値を与え、それらを半分にしています。同様に、プレースホルダの値を取って組み合わせるか、平均化するなどしたいかもしれません。最終的には複数の変数でこれをやりたいので、input_xは更新された/ matmulされた変数とは別にする必要があります。 これはより明確です。Cheers – inkbleed

+0

Mmm、その場合、グラフに入力する前にnumpyを使ってこの操作を実行してみませんか? – rmeertens

関連する問題