1

との問題私はTensorflow:tf.image.central_crop

(384, 384, 3) and (?, ?, 3) 

central_crop()機能が高さとの情報を失うように見えるが出力さtf.image.central_crop()

def preprocessor(image): 
    image = tf.reshape(image, (IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_CHANNELS)) 
    print(image.get_shape()) 
    image = tf.image.central_crop(image,0.8) 
    print(image.get_shape()) 
    return image 

と、次の問題に直面していますイメージテンソル。 なぜこれが起こりますか?

Tensorflow version: tensorflow 1.0.0, tensorflow-gpu 1.0.1 

答えて

1

あなたは正しいです。評価されない限りテンソルの形状を取得することはできません。あなたは、次の操作のためにそれを使用したいなら、 "tf.shape(image)"を使うことができます。

TFはイメージを切り取ったが、その形状を得ることはできませんでした。あなたは、それはそれをやってされているかどうかだけをチェックしたい場合は、この(実行セッション)に従う:

import tensorflow as tf 
import numpy as np 
IMAGE_HEIGHT = 384 
IMAGE_WIDTH = 384 
IMAGE_CHANNELS = 3 

def preprocessor(image): 
    image = tf.reshape(image, (IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_CHANNELS)) 
    image = tf.image.central_crop(image,0.8) 
    shape = tf.shape(image) 
    return image,shape 

image = tf.random_normal([IMAGE_HEIGHT,IMAGE_WIDTH,IMAGE_CHANNELS]) 
image_cropped,shape = preprocessor(image) 

sess = tf.Session() 
im_v,im_crop_v,shape_v = sess.run([image,image_cropped,shape]) 
print(im_v.shape) 
print(im_crop_v.shape) 
print(shape_v) 

出力:答えを

(384, 384, 3) 
(308, 308, 3) 
[308 308 3] 
+0

感謝を。私はいくつかの画像をプリプロセッサに渡し、後でそれらを画像チャンネルに沿って1つのテンソルに積み重ねたい。このためには、2つの画像の場合、例えば**(2,100,100,3)**から**(100,100,6)**のように画像を再形成する必要があります。このために、私は高さと幅が必要です**(100,100)**どのように 'tf.shape'でそれらを得ることができますか?私は 'shape = tf.shape(..)'と 'shape [1]'、 'shape [2]'を試しました。 – user3142067

+0

建物のキューに従うことができます - 画像を前処理(データ拡張)してモデルに送信します:このフレームワークに従ってくださいhttps://github.com/tensorflow/models/blob/master/inception/inception/image_processing.py – hars