python - 在块内应用 conv2d 时形状发生变化
问题描述
我正在使用 tensorflow 应用这篇研究论文,我正在使用顺序 API 构建生成器。
这是我遇到问题的代码:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Conv2D,BatchNormalization,Input,PReLU
from operations import SubPixelConv2d
def make_generator():
w_init = tf.random_normal_initializer(stddev=0.02)
g_init = tf.random_normal_initializer()
x_in = Input(shape=(64,64,3)) # Shape : (None,64,64,3)
print(x_in.shape)
n = Conv2D(filters=64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu', \
kernel_initializer=w_init,data_format="channels_last",input_shape=(64,64,3))(x_in) # TODO: Fix shape current shape: (?,60,60,64)
n = PReLU()(n)
temp = n
print(x_in.shape)
# Residual Block
for i in range(15):
nn = Conv2D(filters=64,kernel_size=(3,3),strides=(1,1),padding='same', \
input_shape=(64,64,3))(n)
print(nn.shape)
nn = BatchNormalization(gamma_initializer=g_init)(nn)
nn = PReLU()(nn)
nn = Conv2D(filters=64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu', \
kernel_initializer=w_init,data_format="channels_last",input_shape=(64,64,3))(nn)
nn = BatchNormalization(gamma_initializer=g_init)(nn)
nn = tf.add_n([n,nn])
n = nn
我拿到ValueError: Dimension 1 in both shapes must be equal, but are 62 and 64. Shapes are [?,62,62,64] and [?,64,64,64].
这就是为什么我要打印出形状以查看问题出在哪里。
这是形状的 o/p:
(None, 64, 64, 3)
2020-05-16 22:19:34.555494: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2020-05-16 22:19:34.555528: E tensorflow/stream_executor/cuda/cuda_driver.cc:313] failed call to cuInit: UNKNOWN ERROR (303)
2020-05-16 22:19:34.555548: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (joyarch): /proc/driver/nvidia/version does not exist
2020-05-16 22:19:34.555777: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-05-16 22:19:34.595735: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 1800000000 Hz
2020-05-16 22:19:34.596281: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f3328000b60 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-16 22:19:34.596308: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
(None, 64, 64, 3)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
(None, 64, 64, 64)
为什么形状会发生变化?
我试过的
从块内的图层中删除kernel_initializer
和data_format
参数。Conv2D
我无法弄清楚是什么导致了这种变化。
解决方案
修复了它,我没有使用kernel_size
论文中给出的正确的卷积层。
推荐阅读
- java - 在 Android 上使用 Firebase 进行基本读写
- spring - 刷新 OSGI Bundle 上下文,找不到 Spring NamespaceHandler
- python-3.x - python脚本的“SublimeRepl”用户输入
- bash - 如何重构 shell 函数以避免重复代码?
- c# - MQQueueManager 消息池
- java - 从 makefile 中的 src 和 res 文件夹编译 Jar 文件
- asp.net - 在 IIS express 中运行相同的应用程序引发错误
- amazon-web-services - 我应该将什么作为 CodeBuild 的 SecurityGroup?
- java - 带有 Spring WebFlow 的 Google reCAPTCHA
- python - TypeError:预期的 str、字节或 os.PathLike 对象,而不是元组