2016-07-24 4 views
1

pythonでテンソルフローを使用するsoftmax回帰プログラムの場合、1000枚のjpegイメージファイルを2Dテンソルxとして取得します。[image index、pixel index]。 「画像インデックス」は画像であり、ピクセルインデックスはその画像の特定の画像ピクセルである。 モデル式は、次のとおりテンソルフローの2Dテンソルとして複数のイメージファイルを取得

y = tf.nn.softmax(tf.matmul(x, W) + b) 
where: 
x = tf.placeholder(tf.float32, [None, image_size]) 
W = tf.Variable(tf.zeros([image_size, classes])) 
b = tf.Variable(tf.zeros([classes])) 

画像サイズ=画像の高さ*幅(全ての画像について一定)。

私のイメージファイルをその形式で取得するには、テンソルフローの最善の方法は何ですか?

答えて

1

私はOpenCV(cv2.imread(...))またはScipy(scipy.ndimage.imread(...))のいずれかを使ってイメージファイルを読みたいと思っています。私はテンソルフローが独自のイメージリーダーを持っているかもしれないとも思っています。これらの2つの関数は、numpyの配列として画像を返します。グレースケールまたはカラーが必要な場合は、引数に指定することができます。これで、イメージを前処理する必要があります。データ型を変換する必要があるかもしれません(OpenCVはfloat32ではなく8ビット整数を使用します)、データを正規化します。イメージがすべて同じサイズでない場合は、この時点でサイズを変更することもできます。

これらのnumpy配列を平坦化して、画像のフラット表現を得ることができます。 np.ndarrayのflatten()関数を呼び出してください。バッチに必要な画像をロードして平坦化した後、numpyの配列np.array([img1, img2, ..., imgN])でそれらを一緒にストリングし、この配列の形状は[画像、ピクセル]になります。これをxプレースホルダーにフィードすることができます。

0

それは訓練のためであれば、私は前処理するすべての画像を好むだろうが、オンラインのライブ映像ストリームとTensorflowを使用するため、私は動的にメモリ内のデータを変更し、以下の方法しようとするだろう:

any_shape = [the most natural shape according to the data you already have...] 
x_unshaped = tf.placeholder(tf.float32, any_shape) 
x = tf.reshape(x_unshaped, [-1, image_size]) 
をあなたのデータがすでに適切にメモリに注文された場合

、あなたはtf.Tensor.set_shape()試みることができる:

tf.Tensor.set_shape()メソッドは、テンソル オブジェクトの静的な形状を更新し、一般的に、追加提供するために使用されます形状 これを直接推論することができない場合の情報。 テンソルの動的形状を変更しません。

出典:https://www.tensorflow.org/versions/r0.9/api_docs/python/framework.html

関連する問題