2016-07-25 8 views
0

私が作業しているCNNへの入力として、画像のシーケンスを使用したい(convレイヤーで3D畳み込みを使用)。3Dテンソルの画像をどのように読み込むのですか?

しかし、私はすでに計算に使用できる3Dテンソルとしてイメージの読み込みに失敗しています。私はnumpyのアレイからの期待通り、私はテンソルとインデックス表記を使用することはできませんので、すでに失敗し

def get_sequence_as_tensor(folder): 
    images = [folder + "/depth-%i.png" for i in range(15)] 

    tensor = tf.zeros(shape=(480, 640, 15), dtype=tf.float32) 
    for i, image in enumerate(images): 
     img = tf.image.decode_png(image) 
     img_float = tf.cast(img, tf.float32) 
     img_float = tf.reshape(img_float, (480, 640)) 
     tensor[:, :, i] = img_float 

    return tensor 

は、ここに私の原始的な試みです。

TypeError: 'Tensor' object does not support item assignment 

一連の画像を3次元テンソルとして読み取るには、どのような方法が適していますか?

答えて

0

テンソルフローの外側のnumpy配列にイメージを結合し、プレースホルダに渡すことをお勧めします。

何かこれはうまくいくはずです。

filename = tf.placeholder("string") 
png_string = tf.read_file(filename) 
img = tf.image.decode_png(png_string) 
img_float = tf.cast(img, tf.float32) 
img_float = tf.reshape(img_float, (480, 640)) 

images = tf.placeholder("float", (480, 640, 15)) 
output = some_operation(images) 

sess = tf.Session() 

images_array = np.zeros((480, 640, 15), np.float32) 
for i, image in enumerate(filenames): 
    images_array[:,:,i] = sess.run(img_float, feed_dict{filename: image}) 

out = sess.run(output, feed_dict={images: images_array}) 

これが役立ちます。

+0

だから、トリックは浮動小数点型のプレースホルダを定義し、そのプレースホルダにnumpy型の配列を渡すだけで、自動的にテンソルに変換されます。 – florianletsch

+0

ありがとう、私はそれを働かせました。あなたのコード例のいくつかの修正(私の後に来る人々のために働きやすくなるように): 1. 'Sesssion' - >' Session'。 2. 'enumerate(images)' - > 'enumerate(filenames)'などと同様に、ファイル名のリストを繰り返します。 3. 'feed_dict {file_name:image}' - > 'feed_dict = {filename:image}' – florianletsch

+0

私は助けることができてうれしいです。エラーについては申し訳ありません。 – jasekp

関連する問題