为什么我不能把张量加在一起?

2024-07-05 14:30:14 发布

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

我目前正在实现在this page上定义的RCL层。在

import keras
from keras.models import Model
from keras.layers import Input, Dense, Dropout, Flatten
from keras.layers import merge, Conv2D, MaxPooling2D, Input
import numpy as np
from keras import backend as K

#   RCL:
#   BatchNorm(Relu(conv(L-1) + conv(L)))
#

def make_RCNN(dim_1,dim_2,dim_3,number_of_rcl,num_of_filter, filtersize):
    return True

def RCL(feed_forward_input,num_of_filter, filtersize):
    conv = Conv2D(filters=num_of_filter, kernel_size=filtersize)
    recurrent_input = conv(feed_forward_input)
    merged = merge([feed_forward_input,recurrent_input],mode='sum')
    conv_relu = Relu(merged)
    conv_relu_batchnorm = BatchNormalization()(conv_relu)
    return conv_relu_batchnorm

input = Input(shape=(30,30,3))
output = RCL(feed_forward_input=input,num_of_filter=3,filtersize=3)

我收到错误信息:

^{pr2}$

上面说形状不一样。。。这确实是一个问题,只有对中国共产党的误解才能引起这个问题。。在

但据我所知,这里也有定义

RCN explanation

我实现的是一个RCL,它从上一层(前馈张量)中引入一个张量,并对该张量(reccurent张量)进行卷积,这两个张量构成z zu ijk(t)方程的第一部分和第二部分。在这之后是两个张量的和,就像根据方程,这是函数有一些问题,因为卷积前馈输入=递归输入的大小不一样。。当两个张量的大小不一样时,如何求和呢?在


Tags: offromimportinputfeedfilternumkeras
1条回答
网友
1楼 · 发布于 2024-07-05 14:30:14

我认为解决方案可能只是简单地向Conv2D调用添加一个padding='same'参数,因此RCL方法如下所示:

def RCL(feed_forward_input,num_of_filter, filtersize):
    conv = Conv2D(filters=num_of_filter, kernel_size=filtersize, padding='same')
    recurrent_input = conv(feed_forward_input)
    merged = merge([feed_forward_input,recurrent_input], mode='sum')
    conv_relu = relu(merged)
    conv_relu_batchnorm = BatchNormalization()(conv_relu)
    return conv_relu_batchnorm

如果没有它,Conv2D层会将输入的大小调整为(28,28,3)图像,该图像不能与原始图像合并。padding参数用零填充图像,以便输出与输入具有相同的形状(或相同形状的简单部分)。在

相关问题 更多 >