Keras拥有3个以上频道的更多Conv3D

时间:2019-11-08 15:14:32

标签: python keras

我对keras Conv3D层有疑问。我的输入是具有4个通道的3D体积(图像加上分割蒙版)。

现在Iam想知道conv3D层应如何设置才能正常工作?当我写的时候:

Conv3D(64, (3, 3, 3), activation='relu', padding='same')(inputs)  

Conv3D(64, 3, activation='relu', padding='same')(inputs) 

并打印出过滤器形状:

(3、3、3、4、64)

我写的时候:

Conv3D(64, (3, 3, 4), activation='relu', padding='same')(inputs) 

但是,过滤器形状为:

(3、3、4、4、64)

据我了解,内核深度应与图像深度或通道数相同。

现在Iam想知道正确的方法是什么,以及为什么过滤器形状具有5个尺寸。我本来希望有4个(高度,宽度,深度,内核数)

预先感谢

干杯

M

1 个答案:

答案 0 :(得分:0)

我认为您对“层输出”应该是正确的期望,但是我认为您可能会将内部层“内核”的形状与该层的处理结果混淆。下面,我提供了一个示例代码,其中包含一些相关数量的打印输出。我相信,如果您查看myModel.summary()的输出,将会看到期望的结果。请注意,Keras使用“无”作为样本尺寸,它是根据实际输入数据确定的。我希望这会有所帮助。

%tensorflow_version 2.x

import tensorflow as tf
import numpy as np

output_units=7

input_data = tf.keras.layers.Input(shape=(16, 16, 16, 4))
c3d = tf.keras.layers.Conv3D(output_units, (3,3,3), padding='same', name='c3d') (input_data)
x = tf.keras.layers.Flatten()(c3d)
x = tf.keras.layers.Dense(1)(x)
myModel =  tf.keras.models.Model(inputs=input_data, outputs=x)

myModel.summary()

x_train = np.random.random((20,16,16,16,4))
y_train = np.random.random((20,1))

myModel.compile(optimizer='rmsprop', loss='mse')
myModel.fit(x_train,y_train,epochs=1)

print(x_train.shape)
print(y_train.shape)

mmy = myModel.get_layer(name='c3d')
print(mmy.kernel.shape)  # This shouldn't be confused with the layer output from the myModel.summary() above.