Keras到pytorch:是什么让我的模型表现得与众不同?

6jygbczu  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(88)

下面我陈述了我的模型在Keras中实现的架构:

ann = tf.keras.models.Sequential()
ann.add(tf.keras.layers.Dense(units=6, activation = "relu"))
ann.add(tf.keras.layers.Dense(units=6, activation = "relu"))
ann.add(tf.keras.layers.Dense(units=1, activation = "sigmoid"))
ann.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
ann.fit(x_train, y_train, batch_size = 32, epochs = 100)

字符串
该模型给出了以下混淆矩阵,其中输入数据是12个预测因子,目标是二进制的。

[[1498   97]
 [ 184  221]]


我用pytorch重新实现了它

class Net(nn.Module):
    def __init__(self,n_inputs):    
        # Define all the parameters of the net
        super(Net, self).__init__()
        self.fc1 = nn.Linear(n_inputs, 6)
        self.fc2 = nn.Linear(6, 6)
        self.fc3 = nn.Linear(6, 1)

    def forward(self, x):    
        # Do the forward pass
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = torch.sigmoid(self.fc3(x))
        return x


然后我得到以下混淆矩阵:

[[1594    0]
 [ 406    0]]


我肯定我错过了一些东西,但似乎我的实现是正确的,但我不知道我错过了什么。

brccelvz

brccelvz1#

Keras和Pytorch之间有很多不同之处,例如内核初始化器,偏差初始化器,随机种子,优化器的参数和超参数。
例如,引用两个文档,keras密集层的初始化器是glorot_uniform和zeros:Keras Dense

tf.keras.layers.Dense(
    units,
    activation=None,
    use_bias=True,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

字符串
而Pytorch linear的初始化器不是:Pytorch Linear

相关问题