更改预训练模型的输入形状及其权重

时间:2017-08-27 02:48:52

标签: python tensorflow deep-learning keras conv-neural-network

我正在尝试使用经过培训的[3D] CNN进行转学,我已经训练了模型及其权重。

但问题是输入大小为(64,64,7,3),而输入大小为(256,256,256,1)。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

这是一个解决方案:一旦减少到(64,64,64),您可以在网络的开头添加1x1 conv2D图层。这个1x1 conv2D将产生一个(64,64,n),其中n是你想要的单位数;在你的情况下3。

在Tensorflow中,你会这样做:

traefik:
    docker-compose.yml
    traefik.toml

这种方法的好处是它将从数据中学习从(64,64,64)到(64,64,3)的转换。

话虽如此,我并没有真正理解为什么你有一个(256,256,256)或(64,64,64)的图像。通常情况下,最后一个维度是通道的数量,通常为3,类似于'RGB'。

修改:根据您编辑过的问题,有多种方法可以获得所需的尺寸。

例如,您可以应用与上述相同的逻辑:在网络的开头添加一个或多个conv3d图层,然后选择正确的kernel_size并跨步以获得所需的尺寸。例如:如果添加以下图层:

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

在网络的开头,如果tf.layers.conv3d(inputs, 3, kernel_size=(193,193,250), strides=(1,1,1)) 是dim的张量=(无,256,256,256,1),你将得到一个dim =(None,64,64,7,3)的Tensor。您还可以使用3d(max / avg / etc)池图层。

当然,您也可以使用inputstf.reshapetf.image.resize_imagestf.transposetf.concat等来获取您想要的尺寸。例如:

tf.layers.conv2d

无论如何,有很多方法可以获得您想要的尺寸,并且根据您的问题,您可能更喜欢一种方法而不是另一种方法。