質問: tf.reshape(image_float, [-1, 32, 32, 1]) ``` CNNを実行したいと思っているのですが畳み込み層、プーリング層を実行する際の具体的なデータの持ち方がイメージできておらず質問させていただきました。 よろしくお願いします。
回答: 質問欄のコードの内容 以下は計算グラフを構築しただけなので、この時点では指定したファイルから画像が読み込まれているわけではありません。 そのため、image.shape の値が (?, ?, 1) となっています。 ``` import tensorflow as tf # ファイルを読み込む。 png = tf.read_file('test.png') print('png.dtype', png.dtype) # png.dtype # デコードする。バイト列 -> テンソル (W, H, C) image = tf.image.decode_png(png, channels=1) print('image.dtype', image.dtype) # image.dtype print('image.dtype', image.shape) # image.dtype (?, ?, 1) # テンソルの型を float 型にする。 image_float = tf.to_float(image) ``` (32, 32, 1) を (1, 32, 32, 1) とバッチ次元を追加しています。 image_float のテンソルは (32, 32, 1)、つまり、元の画像サイズが (32, 32) であればよいですが、そうでないなら、エラーになります。 ``` image_reshape = tf.reshape(image_float, [-1, 32, 32, 1]) ``` テンソルは sess.run() で計算を実行することで、numpy 配列として値を取得できます。