Python Pytorch和Keras实现在文本分类中的性能差异很大

Python Pytorch和Keras实现在文本分类中的性能差异很大,python,tensorflow,keras,pytorch,torchtext,Python,Tensorflow,Keras,Pytorch,Torchtext,我已经在Keras和Pytorch中实现了CNN,用于多标签文本分类任务。两个实现以两种截然不同的性能结束。有Keras的CNN明显优于有Pytorch的CNN。两者都使用内核大小为4的单层CNN Pytorch版本的微观F1得分0.023,宏观F1得分0.47。模型如下图所示(更多详细信息见colab笔记本): 对于微观F1,Keras版本得分0.70;对于宏观F1,Keras版本得分0.56。模型如下图所示(更多详细信息见colab笔记本): 我认为我的Pytorch实现有问题。如有任何评论

我已经在Keras和Pytorch中实现了CNN,用于多标签文本分类任务。两个实现以两种截然不同的性能结束。有Keras的CNN明显优于有Pytorch的CNN。两者都使用内核大小为4的单层CNN

Pytorch版本的微观F1得分0.023,宏观F1得分0.47。模型如下图所示(更多详细信息见colab笔记本):

对于微观F1,Keras版本得分0.70;对于宏观F1,Keras版本得分0.56。模型如下图所示(更多详细信息见colab笔记本):

我认为我的Pytorch实现有问题。如有任何评论,我们将不胜感激。我已经为Pytork和Keras的完整实现创建了。请随意复制并运行它。请告诉我我在这件事上做错了什么。谢谢

class CNN_simple(nn.Module):
    def __init__(self, vocab_size, embedding_dim, n_filters, filter_sizes, output_dim, 
                 dropout, pad_idx):       
        super().__init__()      
        self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx = pad_idx)       
        self.conv = nn.Conv1d(in_channels = embedding_dim, 
                              out_channels = n_filters,
                              kernel_size = 4) # (N,C,L)

        self.fc = nn.Linear(n_filters, output_dim)     
        self.dropout = nn.Dropout(dropout)

    def forward(self, text):      
        embedded = self.embedding(text)
        embedded = embedded.permute(0, 2, 1)
        conved = F.relu(self.conv(embedded))
        pooled = F.max_pool1d(conved, conved.shape[2]).squeeze(2)
        dropout = self.dropout(pooled)
        return self.fc(dropout)
def get_model_cnn():
    inp = Input(shape=(MAX_TEXT_LENGTH, ))
    x = Embedding(MAX_VOCAB_SIZE, embed_size)(inp)

    x = Conv1D(embed_size, 4, activation="relu")(x)
    x = GlobalMaxPool1D()(x)
    x = Dense(6, activation="sigmoid")(x)

    model = Model(inputs=inp, outputs=x)
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model