tensorflow - TensorFlow v1 和 v2 中 Keras 的 ZeroPadding2D 的区别?
问题描述
我最近完成了 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 的形状如下(print
在 Coursera 的 Notebook 中执行):
(?, 3, 96, 96) # shape of X_input
(?, 3, 102, 102) # shape of X
但是,当我尝试使用 tf 2.2.0 在 Google Colab 上的 Notebook 中运行完全相同的代码时,形状为:
(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)
解决方案
替换代码,
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)
推荐阅读
- django - Проблема с файлом wsgi.py(wsgi.py 文件的问题)
- flutter - 如何获取 sqflite 使用的 db 文件?
- html - 外部 CSS 字体系列未在浏览器中显示
- python - Python - 创建一个检查列表列表中的新元素的函数
- php - 如何从 Lumen 连接到 Firebird 数据库?
- python - 在 Python for 循环中使用 %s
- python - 标签和列表视图未显示在小部件上
- python - 在 Google Colab 上运行 autokeras 图像分类器教程时出错
- swift - macCatalyst 应用程序:如何在不终止应用程序的情况下关闭窗口?
- oracle - Oracle DB with .NET Core Using ODP.Net Provider - 如何设置架构