(Keras-Tensorflow)如何根据另一个输出的值来裁剪输出张量?

时间:2018-11-16 12:44:27

标签: python-3.x tensorflow keras conv-neural-network crop

我正在做一个keras应用程序,它可以根据3D图像输入来预测一组坐标。我的体系结构如下:

img_input = keras.layers.Input((96,64,64,1))

x = keras.layers.Conv3D(32, (3, 3 ,3), activation='relu', padding='same', name='block1_conv1',trainable=True)(img_input)
x = keras.layers.Conv3D(32, (3, 3 ,3), activation='relu', padding='same', name='block1_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2, 2),  name='block1_pool')(x)

# Block 2
x = keras.layers. Conv3D(64, (3, 3 ,3), activation='relu', padding='same', name='block2_conv1',trainable=True)(x)
x = keras.layers.Conv3D(64, (3, 3 ,3), activation='relu', padding='same', name='block2_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2),  name='block2_pool')(x)

# Block 3
x = keras.layers.Conv3D(128, (3, 3 ,3), activation='relu', padding='same', name='block3_conv1',trainable=True)(x)
x = keras.layers.Conv3D(128, (3, 3 , 3), activation='relu', padding='same', name='block3_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2),  name='block3_pool')(x)

# Block 3
x = keras.layers.Conv3D(128, (3, 3 ,3), activation='relu', padding='same', name='block4_conv1',trainable=True)(x)
x = keras.layers.Conv3D(128, (3, 3 , 3), activation='relu', padding='same', name='block4_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2),  name='block4_pool')(x)

x = keras.layers.Flatten(name='flatten')(x)

x = keras.layers.Dense(4096,activation='relu',name="fc7",trainable=True)(x)

x = keras.layers.Dense(4096,activation='relu',name="fc8",trainable=True)(x)

x = keras.layers.Dense(288,activation='linear',name="fc10",trainable=True)(x)

事实是,输出并不是真正的288尺寸,它们的长度都是可变的,但是为了得到固定尺寸的输出,我将它们全部零填充了。

另一方面,我还训练了一个神经网络,该神经网络可以预测这些输出的长度,从而提供相同的3D输入,并且效果很好。

我想要的是使用第二个网络的输出来裁剪第一个网络的输出。例如,如果我的第二个网络预测值为285,则第一个网络会将输出从288裁剪为285。

有可能在喀拉拉邦吗?还是可以给我一些建议,以及如何执行此任务(预测正确长度的良好坐标)?

非常感谢您

0 个答案:

没有答案