import math import paddle import paddle.nn as nn import paddle.nn.functional as F # import pywt from paddle.nn import Linear, Dropout, ReLU from paddle.nn import Conv2D, MaxPool2D class mcnn(nn.Layer): def __init__( self , num_classes = 1000 ): super (mcnn, self ).__init__() self .num_classes = num_classes self ._conv1_LL = Conv2D( 3 , 32 , 7 ,stride = 2 ,padding = 1 ,) # self.bn1_LL = nn.BatchNorm2D(128) self ._conv1_LH = Conv2D( 3 , 32 , 7 ,stride = 2 ,padding = 1 ,) # self.bn1_LH = nn.BatchNorm2D(256) self ._conv1_HL = Conv2D( 3 , 32 , 7 ,stride = 2 ,padding = 1 ,) # self.bn1_HL = nn.BatchNorm2D(512) self ._conv1_HH = Conv2D( 3 , 32 , 7 ,stride = 2 ,padding = 1 ,) # self.bn1_HH = nn.BatchNorm2D(256) self .pool_1_LL = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self .pool_1_LH = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self .pool_1_HL = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self .pool_1_HH = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self ._conv2 = Conv2D( 32 , 16 , 3 ,stride = 2 ,padding = 1 ,) self .pool_2 = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self .dropout2 = Dropout(p = 0.5 ) self ._conv3 = Conv2D( 16 , 32 , 3 ,stride = 2 ,padding = 1 ,) self .pool_3 = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self ._conv4 = Conv2D( 32 , 32 , 3 ,stride = 2 ,padding = 1 ,) self .pool_4 = nn.MaxPool2D(kernel_size = 2 ,stride = 2 , padding = 0 ) self .dropout4 = Dropout(p = 0.5 ) # self.bn1_HH = nn.BatchNorm1D(256) self ._fc1 = Linear(in_features = 64 ,out_features = num_classes) self .dropout5 = Dropout(p = 0.5 ) self ._fc2 = Linear(in_features = 2 ,out_features = num_classes) def forward( self , inputs1, inputs2, inputs3, inputs4): x1_LL = self ._conv1_LL(inputs1) x1_LL = F.relu(x1_LL) x1_LH = self ._conv1_LH(inputs2) x1_LH = F.relu(x1_LH) x1_HL = self ._conv1_HL(inputs3) x1_HL = F.relu(x1_HL) x1_HH = self ._conv1_HH(inputs4) x1_HH = F.relu(x1_HH) pool_x1_LL = self .pool_1_LL(x1_LL) pool_x1_LH = self .pool_1_LH(x1_LH) pool_x1_HL = self .pool_1_HL(x1_HL) p
|