Thank you @Abhilash_Srivastava for your response.
I tried with skroch but i found an error here
net = NeuralNet(
    model,    
    max_epochs=50,
    lr=0.1,
    criterion = torch.nn.CrossEntropyLoss(),
    # Shuffle training data on each epoch
    iterator_train__shuffle=True,
    verbose=False,
)
net.fit(data, targets)

TypeError                                 Traceback (most recent call last)
<ipython-input-1-b062d1acaff3> in <module>
    166     verbose=False,
    167 )
--> 168 net.fit(data, targets)
    169 y_proba = net.predict_proba(X)
    170 #score(X, y[, sample_weight])

/opt/tljh/user/envs/fethi_env/lib/python3.6/site-packages/skorch/net.py in fit(self, X, y, **fit_params)
    899         """
    900         if not self.warm_start or not self.initialized_:
--> 901             self.initialize()
    902 
    903         self.partial_fit(X, y, **fit_params)

/opt/tljh/user/envs/fethi_env/lib/python3.6/site-packages/skorch/net.py in initialize(self)
    583         self.initialize_virtual_params()
    584         self.initialize_callbacks()
--> 585         self.initialize_criterion()
    586         self.initialize_module()
    587         self.initialize_optimizer()

/opt/tljh/user/envs/fethi_env/lib/python3.6/site-packages/skorch/net.py in initialize_criterion(self)
    471         """Initializes the criterion."""
    472         criterion_params = self.get_params_for('criterion')
--> 473         self.criterion_ = self.criterion(**criterion_params)
    474         if isinstance(self.criterion_, torch.nn.Module):
    475             self.criterion_ = to_device(self.criterion_, self.device)

/opt/tljh/user/envs/fethi_env/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    530             result = self._slow_forward(*input, **kwargs)
    531         else:
--> 532             result = self.forward(*input, **kwargs)
    533         for hook in self._forward_hooks.values():
    534             hook_result = hook(self, input, result)

TypeError: forward() missing 2 required positional arguments: 'input' and 'target'
​

Rq: 3DCNN:
class CNNModel(nn.Module):
    def __init__(self): 
        super(CNNModel, self).__init__() # héritage
        
        self.conv_layer1 = self._conv_layer_set(3, 32)
        self.conv_layer2 = self._conv_layer_set(32, 64) 
        self.fc1 = nn.Linear(64*28*28*28, 2) 
        self.fc2 = nn.Linear(1404928, num_classes) 
        self.relu = nn.LeakyReLU()
        self.batch=nn.BatchNorm1d(2)
        self.drop=nn.Dropout(p=0.15, inplace = True)   
        
    def _conv_layer_set(self, in_c, out_c):
        conv_layer = nn.Sequential(
        nn.Conv3d(in_c, out_c, kernel_size=(3, 3, 3), padding=0),
        nn.LeakyReLU(),
        nn.MaxPool3d((2, 2, 2)),
        )
        return conv_layer
    

    def forward(self, x):
        # Set 1
        out = self.conv_layer1(x)
        out = self.conv_layer2(out)
        out = out.view(out.size(0), -1) 
        out = self.fc1(out)
        out = self.relu(out)
        out = self.batch(out)
        out = self.drop(out)
        out = F.softmax(out, dim=1) 
        return out