2017-08-27 11 views

答えて

2

これは1つの解決策です:ネットワークの始めに1x1 conv2Dレイヤーを追加すると、(64,64,64)に減らすことができます。この1x1 conv2Dは、(64,64、n)という結果になります。ここでnは、あなたが望むユニットの数です。あなたのケースTensorflow 3.

に、あなたはこのようにそれを行うだろう:

tf.layers.conv2D(inputs, 3, kernel_size=(1,1), activation=<your_activation>) 

このアプローチの利点を、それがデータから(64,64,64から行くための変換を学ぶということです)〜(64,64,3)となる。

私は、なぜあなたが最初に(256,256,256)または(64,64,64)の画像を持っているのかは分かりませんでした。通常、最後の次元はチャネルの数で、「RGB」の場合のように3つです。

編集:編集した質問に応じて、目的のサイズを取得する方法がいくつかあります。

たとえば、ネットワークの冒頭に1つ以上のconv3dレイヤーを追加し、適切なkernel_sizeとstrideを選択して、目的のサイズにすることができます。あなたは次の層を追加した場合:例ネットワークの先頭に

tf.layers.conv3d(inputs, 3, kernel_size=(193,193,250), strides=(1,1,1)) 

inputsが暗いのテンソルである場合は、DIM =(なし、64,64,7,3)のテンソルを取得します=(なし、256,256,256,1)。 3d(max/avg/etc)のプール層を使用することもできます。

そしてもちろん、あなたはまた、あなたが望む寸法を得るためにtf.reshapetf.image.resize_imagestf.transposetf.concattf.layers.conv2dなどを使用することができます。例:

inputs = tf.placeholder(<tf.type>, shape=(None,256,256,256,1)) 
a = tf.reshape(inputs, (-1,256,256,256)) # shape=(None,256,256,256) 
b = tf.image.resize_images(a, (64,64)) # shape=(None,64,64,256) 
c = tf.layers.conv2d(b, 7, kernel_size=(1,1)) # shape=(None,64,64,7) 
d = tf.reshape(c, (-1,64,64,7,1)) # shape=(None,64,64,7,1) 
e = tf.layers.conv3d(d, 3, kernel_size=(1,1,1)) # shape=(None,64,64,7,3) 

とにかく、あなたが望む寸法を得るには多くの方法がありますが、問題によっては別の方法よりも1つの方法を優先することができます。

+0

お詫び申し上げます。私は寸法を混乱させました、今私は記事を編集しました。さらに、私はConv3DではなくConv2Dに取り組んでいます。 – Hamdard

関連する問題