首页 > 解决方案 > 在块内应用 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_initializerdata_format参数。Conv2D

我无法弄清楚是什么导致了这种变化。

标签: pythontensorflowkerasdeep-learning

解决方案


修复了它,我没有使用kernel_size论文中给出的正确的卷积层。


推荐阅读