Python
1 2class CNN_generator(nn.Module): 3 4 def __init__(self,convSetSet,device): 5 super(CNN_generator, self).__init__() 6 7 convSetSet=[ 8 [inChannels, outChannels[0], kernelSizes[0], { 'pReLu1':nn.PReLU(outChannels[0]).to(device) } ], 9 [outChannels[0], outChannels[1], kernelSizes[0], { 'pReLu2':nn.PReLU(outChannels[1]).to(device), 'MaxPool1':self.maxpool1, 'DropOut1':self.dropout1 } ], 10 [outChannels[1], outChannels[2], kernelSizes[0], { 'pReLu3':nn.PReLU(outChannels[2]).to(device) } ], 11 [outChannels[2], outChannels[3], kernelSizes[0], { 'pReLu4':nn.PReLU(outChannels[3]).to(device), 'DropOut2':self.dropout2, 'MaxPool2':self.maxpool2 } ] 12 ] 13 14 15 #### 1⃣ NN parameterリストに登録してくれない: 16 self.modules = [Conv2dBlock(convSetSet[0],device).to(device)]*10 #10個のNN layer生成したが、NNのパラメータListに反映してくれない 17 print("\n self.modules= \n",self.modules ) 18 19 20 #### 2⃣ NN parameterリストに登録してくれない: 21 for i,convSet in enumerate(convSetSet): 22 self.modules[i] = Conv2dBlock(convSet,device).to(device) #4個のNN layer生成したが、NNのパラメータListに反映してくれない 23 24 #### 3⃣ NN parameterリストに登録してくれない: 25 for convSet in convSetSet: 26 self.modules.append(Conv2dBlock(convSet,device).to(device)) #4個のNN layer生成したが、NNのパラメータListに反映してくれない 27 28 #### 4⃣ NN parameterリストに登録してくれない: 29 self.blocks = [nn.Sequential() for i in range(10)] 30 31 self.blocks[0].add_module("Block1_ConvB1", Conv2dBlock(convSetSet[0],device)) 32 self.blocks[1].add_module("Block1_ConvB2", Conv2dBlock(convSetSet[1],device)) 33 self.blocks[2].add_module("Block1_ConvB3", Conv2dBlock(convSetSet[2],device)) 34 self.blocks[3].add_module("Block1_MaxPool", nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) 35 36 37 #======================================================================# 38 39 #### 5⃣ NN parameterリストに登録できる: 40 self.sequent = nn.Sequential() 41 self.sequent.add_module("Block1_ConvB3", Conv2dBlock(convSetSet[2],device)) 42 43上記5⃣の場合の結果: 44class CNN_generator(nn.Module)のinstanceのprint : 45 46(sequent): Sequential( 47 (Block1_ConvB3): Conv2dBlock( 48 (conv): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 49 (layers): Sequential( 50 (Conv2d): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 51 (BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 52 (relu3): ReLU(inplace=True) 53 ) 54 ) 55 ) 56 57
nn.Sequential()を利用せず、単刀直入の場合:
Python
1class CNN_generator(nn.Module): 2 3 def __init__(self,convSetSet,device): 4 super(CNN_generator, self).__init__() 5 6 #### 1⃣ NN parameterリストに登録してくれない: 7 8 self.convBlocks = [Conv2dBlock(convSetSet[0],device).to(device)]*10 9 10 for i,convSet in enumerate(convSetSet): 11 self.convBlocks[i] = Conv2dBlock(convSet,device).to(device) 12 13 #======================================================================# 14 15 #### 2⃣ NN parameterリストに登録できる: 16 self.convBlock0 = Conv2dBlock(convSetSet[0],device).to(device) 17 self.convBlock1 = Conv2dBlock(convSetSet[1],device).to(device) 18 self.convBlock2 = Conv2dBlock(convSetSet[2],device).to(device) 19 20 21上記2⃣の場合の結果: class CNN_generator(nn.Module)のinstanceのprint : 22 23(convBlock0): Conv2dBlock( 24 (conv): Conv2d(1, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 25 (layers): Sequential( 26 (Conv2d): Conv2d(1, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 27 (BatchNorm2d): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 28 (relu1): ReLU(inplace=True) 29 ) 30 ) 31 (convBlock1): Conv2dBlock( 32 (conv): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 33 (layers): Sequential( 34 (Conv2d): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 35 (BatchNorm2d): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 36 (relu2): ReLU(inplace=True) 37 (MaxPool1): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), padding=0, dilation=1, ceil_mode=False) 38 (DropOut1): Dropout(p=0.25, inplace=False) 39 ) 40 ) 41 (convBlock2): Conv2dBlock( 42 (conv): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 43 (layers): Sequential( 44 (Conv2d): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False, padding_mode=replicate) 45 (BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 46 (relu3): ReLU(inplace=True) 47 ) 48 ) 49
原因説明できる方宜しくお願いいたします。 💖💖
あなたの回答
tips
プレビュー