带Keras和WGANs的无效argumenterror

2024-04-25 16:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用最新的Keras包和Tensorflow后端和python3.6构建一个critic网络,作为Wasserstein远程生成对抗网络的一部分。以下是网络体系结构的代码:

def build_critic():
    critic = Sequential(name='critic')
    critic.add(Conv2D(64, (3, 3), padding='same', 
               kernel_initializer='he_normal', input_shape= 
               (48,48,1),data_format='channels_last'))
    critic.add(LeakyReLU())
    critic.add(Conv2D(128, (3, 3), padding='same', 
               kernel_initializer='he_normal'))
    critic.add(LeakyReLU())
    critic.add(Conv2D(128, (3, 3), padding='same', 
               kernel_initializer='he_normal'))
    critic.add(LeakyReLU())
    critic.add(Conv2D(256, (3, 3), padding='same', 
               kernel_initializer='he_normal'))
    critic.add(LeakyReLU())
    critic.add(GlobalMaxPooling2D(data_format='channels_last'))
    critic.add(Dense(100))
    critic.add(LeakyReLU())
    critic.add(Dense(1))
    return critic

在试图编译网络时,我得到了一个错误:

InvalidArgumentError (see above for traceback): Matrix size-incompatible: In[0]: [256,48], In[1]: [256,100] [[Node: critic_2/dense_2/MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](critic_2/global_max_pooling2d_1/Max, dense_2/kernel/read)]]

我明白错误在抱怨什么。为了将大小为AxB和CxD的两个矩阵相乘,B必须等于C,而这里B=48和C=256。如何设置C?或者还有其他问题需要我考虑吗?在

以下是generator和Critical网络的网络摘要:

^{pr2}$

Tags: 网络addformatdatakernellasthesame