Pytorch 到 Keras 代码等价

Pytorch to Keras code equivalence

给定 PyTorch 中的以下代码,Keras 的等效代码是什么?

class Network(nn.Module):

    def __init__(self, state_size, action_size):
        super(Network, self).__init__()

        # Inputs = 5, Outputs = 3, Hidden = 30
        self.fc1 = nn.Linear(5, 30)
        self.fc2 = nn.Linear(30, 3)

    def forward(self, state):
        x = F.relu(self.fc1(state))
        outputs = self.fc2(x)
        return outputs

是这个吗?

model = Sequential()
model.add(Dense(units=30, input_dim=5, activation='relu'))
model.add(Dense(units=30, activation='relu'))
model.add(Dense(units=3, activation='linear'))

还是这个?

model = Sequential()
model.add(Dense(units=30, input_dim=5, activation='linear'))
model.add(Dense(units=30, activation='relu'))
model.add(Dense(units=3, activation='linear'))

是吗?

model = Sequential()
model.add(Dense(units=30, input_dim=5, activation='relu'))
model.add(Dense(units=30, activation='linear'))
model.add(Dense(units=3, activation='linear'))

谢谢

据我所知,其中

None 个看起来是正确的。正确的 Keras 等效代码为:

model = Sequential()
model.add(Dense(30, input_shape=(5,), activation='relu')) 
model.add(Dense(3)) 

model.add(Dense(30, input_shape=(5,), activation='relu'))

模型将输入形状为 (*, 5) 的数组,输出形状为 (*, 30) 的数组。除了 input_shape,您还可以使用 input_diminput_dim=5 等同于 input_shape=(5,).

model.add(Dense(3))

第一层之后,你不需要再指定输入的大小。此外,如果您不指定任何激活,则不会应用任何激活(相当于线性激活)。


另一种选择是:

model = Sequential()
model.add(Dense(30, input_dim=5)) 
model.add(Activation('relu'))
model.add(Dense(3)) 

希望这是有道理的!

看起来像

model = Sequential()
model.add(InputLayer(input_shape=input_shape(5,)) 
model.add(Dense(30, activation='relu')
model.add(Dense(3))

如果您尝试将 Pytorch 模型转换为 Keras 模型,您也可以尝试使用 Pytorch2Keras 转换器。

它支持基础层,如 Conv2d、线性、激活、逐元素操作。所以,我转换了 ResNet50 并出现错误 1e-6。

  model = Sequential()
  model.add(Dense(30, input_dim=5, activation='relu'))
  model.add(Dense(3, activation=None))