【问题标题】:Difference of Keras' ZeroPadding2D in TensorFlow v1 and v2?TensorFlow v1 和 v2 中 Keras 的 ZeroPadding2D 的区别?
【发布时间】:2020-06-25 17:31:51
【问题描述】:

我最近完成了 Andrew Ng 在 Coursera 上针对卷积网络的深度学习课程。最后一个作业结束了人脸识别。我想将此作业中的代码迁移到使用 TensorFlow 1.2.1 的最新版本(我使用的是 TensorFlow 2.2.0)。

让我们从使用 tf 1.2.1 的赋值中观察以下代码:

  from keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate
  X_input = Input(input_shape)
  X = ZeroPadding2D((3, 3))(X_input)

在哪里input_shape = (3, 96, 96)。 X_input 和 X 的形状如下(用 Coursera 的 Notebook 中的print 执行):

(?, 3, 96, 96)   # shape of X_input
(?, 3, 102, 102) # shape of X

但是,当我尝试在我的 Notebook on Google Colab 中使用 tf 2.2.0 运行完全相同的代码时,形状是:

(None, 3, 96, 96)  # shape of X_input
(None, 9, 102, 96) # shape of X

在我看来ZeroPadding2D 的工作方式不同。那正确吗?如何执行零填充以实现与分配中的形状相同的形状(不接触通道)?

谢谢!

编辑: 我个人笔记本中的代码块:

from tensorflow import keras
from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, AveragePooling2D, ZeroPadding2D, BatchNormalization, Activation, Dense, Lambda

X_input = Input(input_shape)
print(X_input.shape)
X = ZeroPadding2D((3, 3))(X_input)
print(X.shape)

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network tensorflow2.0


    【解决方案1】:

    替换代码,

    X = ZeroPadding2D((3, 3))(X_input)
    

    X = ZeroPadding2D(padding = ((3, 3), (3,3)), data_format='channels_first')(X_input)
    

    会给你预期的结果。

    完整的工作代码如下所示:

    from tensorflow import keras
    from tensorflow.keras.layers import Input, Conv2D, MaxPool2D, AveragePooling2D, ZeroPadding2D, BatchNormalization, Activation, Dense, Lambda
    input_shape = (3, 96, 96)
    X_input = Input(input_shape)
    print(X_input.shape)
    X = ZeroPadding2D(padding = ((3, 3), (3,3)), data_format='channels_first')(X_input)
    print(X.shape)
    

    【讨论】:

    • 谢谢,这确实有帮助!
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 2020-05-16
    • 2015-09-25
    • 2020-03-16
    • 2021-06-18
    • 2020-05-31
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多