Hi everyone!
I am newbie for PyTorch.
i try to rewrite my network from keras to pytorch. keras can decrease loss to 500 but pytorch stuck at 1000.
[keras]
Seq_deepCpf1_Input_SEQ = Input(shape=(34, 4))
Seq_deepCpf1_C1 = Convolution1D(80, 5, activation=‘relu’)(Seq_deepCpf1_Input_SEQ)
Seq_deepCpf1_P1 = AveragePooling1D(2)(Seq_deepCpf1_C1)
Seq_deepCpf1_F = Flatten()(Seq_deepCpf1_P1)
Seq_deepCpf1_DO1 = Dropout(0.3)(Seq_deepCpf1_F)
Seq_deepCpf1_D1 = Dense(80, activation=‘relu’)(Seq_deepCpf1_DO1)
Seq_deepCpf1_DO2 = Dropout(0.3)(Seq_deepCpf1_D1)
Seq_deepCpf1_D2 = Dense(40, activation=‘relu’)(Seq_deepCpf1_DO2)
Seq_deepCpf1_DO3 = Dropout(0.3)(Seq_deepCpf1_D2)
Seq_deepCpf1_D3 = Dense(40, activation=‘relu’)(Seq_deepCpf1_DO3)
Seq_deepCpf1_DO4 = Dropout(0.3)(Seq_deepCpf1_D3)
Seq_deepCpf1_Output = Dense(1, activation=‘linear’)(Seq_deepCpf1_DO4)
Seq_deepCpf1 = Model(inputs=[Seq_deepCpf1_Input_SEQ], outputs=[Seq_deepCpf1_Output])
print(Seq_deepCpf1.summary())
import keras
Seq_deepCpf1.compile(optimizer=keras.optimizers.Adam(lr=0.005, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0),
                    loss='mse')
Seq_deepCpf1.fit(x=SEQ, y=indel_f,epochs=50)

[pytorch]
class Regression(nn.Module):
def init(self):
super(Regression, self).init()
self.conv1d = nn.Conv1d(4, 80, 5, 1) # 进去4通道出来80通道 (30,80)
self.relu = nn.ReLU()
self.avg1d = nn.AvgPool1d(2) # size of window 2  (15,80)
self.flatten = nn.Flatten()
self.dropout = nn.Dropout(p=0.3)
self.linear1200_80 = nn.Linear(80 * 15, 80)
self.linear80_40 = nn.Linear(80, 40)  #(None, 40)
self.linear40_40 = nn.Linear(40, 40)  # (None, 40)
self.linear40_1 = nn.Linear(40, 1)  # (None, 40)
def forward(self, x):
    outconv1d = self.conv1d(x) # 进去4通道出来80通道 (30,80)
    outact = self.relu(outconv1d)
    # Seq_deepCpf1_C1 = Convolution1D(80, 5)(Seq_deepCpf1_Input_SEQ)
    outavg1d = self.avg1d(outact)  # size of window 2  (15,80)
    # Seq_deepCpf1_P1 = AveragePooling1D(2)(Seq_deepCpf1_C1)
    out_flatten = self.flatten(outavg1d)
    # Seq_deepCpf1_F = Flatten()(Seq_deepCpf1_P1)
    out_dropout = self.dropout(out_flatten)
    # Seq_deepCpf1_DO1 = Dropout(0.3)(Seq_deepCpf1_F)
    out_linear1200_80 = self.linear1200_80(out_dropout)
    out_act_linear1200_80 = self.relu(out_linear1200_80)
    # Seq_deepCpf1_D1 = Dense(80, activation='relu')(Seq_deepCpf1_DO1)
    out_dropout1200_80 = self.dropout(out_act_linear1200_80)
    # Seq_deepCpf1_DO2 = Dropout(0.3)(Seq_deepCpf1_D1)
    out_linear80_40 = self.linear80_40(out_dropout1200_80)
    out_act80_40 = self.relu(out_linear80_40)
    # Seq_deepCpf1_D2 = Dense(40, activation='relu')(Seq_deepCpf1_DO2)
    out_dropout80_40 = self.dropout(out_act80_40)
    # Seq_deepCpf1_DO3 = Dropout(0.3)(Seq_deepCpf1_D2)
    out_linear40_40 = self.linear40_40(out_dropout80_40)
    out_act40_40 = self.relu(out_linear40_40)
    # Seq_deepCpf1_D3 = Dense(40, activation='relu')(Seq_deepCpf1_DO3)
    out_dropout40_40 = self.dropout(out_act40_40)
    # Seq_deepCpf1_DO4 = Dropout(0.3)(Seq_deepCpf1_D3)
    out = self.linear40_1(out_dropout40_40)
    # Seq_deepCpf1_Output = Dense(1, activation='linear')(Seq_deepCpf1_DO4)
    return out


model = Regression().to(device)
loss = nn.MSELoss()  # 所以 loss 使用 MSELoss
optimizer = torch.optim.Adam(model.parameters(), lr=0.005)  # optimizer 使用 Adam
num_epoch = 50

for epoch in range(num_epoch):
    train_loss = 0.0
    count = int(len(train_x)/batch_size)+1
    model.train()  
    
    for i, data in enumerate(train_loader):
        optimizer.zero_grad() 


        train_pred = model(data[0].to(device=device)) 
        batch_loss = loss(train_pred, data[1].to(device=device))  
        batch_loss.backward()  
        # print(str(i))
        optimizer.step() 

        # train_acc += np.sum(np.argmax(train_pred.cpu().data.numpy(), axis=1) == data[1].numpy())#和groud thuth 比较看正确率
        train_loss += batch_loss.item()

    j = j + 1
    print("Epoch :", epoch  ,"train_loss:",train_loss/count)

keras output
Epoch 50/50
1000/14999 [=>…] - ETA: 0s - loss: 514.2870
3000/14999 [=====>…] - ETA: 0s - loss: 533.6077
5000/14999 [=========>…] - ETA: 0s - loss: 529.4184
7000/14999 [=============>…] - ETA: 0s - loss: 523.6750
9000/14999 [=================>…] - ETA: 0s - loss: 517.9706
11000/14999 [=====================>…] - ETA: 0s - loss: 516.3988
13000/14999 [=========================>…] - ETA: 0s - loss: 516.1699
14999/14999 [==============================] - 0s 28us/step - loss: 510.5814
pytorch output
Epoch : 42 train_loss: 1107.6384684244792
Epoch : 43 train_loss: 1124.8985188802083
Epoch : 44 train_loss: 1117.5798095703126
Epoch : 45 train_loss: 1103.8336100260417
Epoch : 46 train_loss: 1100.827498372396
Epoch : 47 train_loss: 1104.8447998046875
Epoch : 48 train_loss: 1101.6757080078125
Epoch : 49 train_loss: 1100.1193359375
code and data are available on GitHub

  
      
      GitHub
  
  
    

desertzk/pythondemo 2

Contribute to desertzk/pythondemo development by creating an account on GitHub.


  
  
    
    
  
  


keras code is in DeepCpf1.py
pytorch code is in DeepCpf1_pytorch.py 1
thanks