【问题标题】:How to get desired dimension as Tensorflow (Keras) output?如何获得所需的尺寸作为 Tensorflow(Keras)输出?
【发布时间】:2019-11-14 19:56:01
【问题描述】:

总的来说,我对机器学习和 Tensorflow 还是很陌生。我正在尝试为模型提供 800x800x1 尺寸的图像,并尝试获取 800x800x1 尺寸的图像作为输出。

我正在尝试为模型提供这张图片,


并尝试重新创建下面给出的所需版本,

到目前为止,我的模型是,

model = models.Sequential()
model.add(layers.Conv2D(32, (5, 5), activation='relu', input_shape=(800, 800, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))

以及模型的总结,

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_70 (Conv2D)           (None, 796, 796, 32)      832       
_________________________________________________________________
max_pooling2d_36 (MaxPooling (None, 398, 398, 32)      0         
_________________________________________________________________
conv2d_71 (Conv2D)           (None, 396, 396, 64)      18496     
_________________________________________________________________
max_pooling2d_37 (MaxPooling (None, 198, 198, 64)      0         
_________________________________________________________________
conv2d_72 (Conv2D)           (None, 196, 196, 128)     73856     
=================================================================
Total params: 93,184
Trainable params: 93,184
Non-trainable params: 0

从最后一个卷积层输出可以看出,形状为(196,196,128)。 所以我想知道如何在输出中实现所需的 800x800x1 尺寸。我知道问题出在我的层面,但没有必要的知识来研究问题。非常感谢任何想法或指导方针。

谢谢。 祝你有美好的一天!

【问题讨论】:

  • 如果您需要对图像进行上采样,您需要使用转置卷积(或者有些人称之为反卷积)。
  • 感谢您的评论。我试试看!

标签: python tensorflow machine-learning keras computer-vision


【解决方案1】:

确切地说,这就是您在 Keras 中实现转置卷积的方式。在这里你应该得到最后一层输出(800x800x1)。在 Conv2DTranspose 中设置 strides 非常重要,因为这就是实现上采样的方式。

from tensorflow.keras import layers, models

model = models.Sequential()
model.add(layers.Conv2D(32, (5, 5), activation='relu', padding='same', input_shape=(800, 800, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(layers.Conv2DTranspose(64, (3, 3), strides=(2,2), padding='same', activation='relu'))
model.add(layers.Conv2DTranspose(1, (3, 3), strides=(2,2), padding='same', activation='relu'))

model.summary()

【讨论】:

  • 非常感谢您的回答。这正是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2016-06-11
  • 2019-02-04
  • 2019-08-30
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多