Pytorch到Keras代码等价

时间:2017-10-21 18:43:55

标签: keras pytorch

鉴于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'))

由于

3 个答案:

答案 0 :(得分:7)

根据我的知识,它们看起来都不正确。正确的Keras等效代码是:

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

model.add(密集(30,input_shape =(5,),激活=' relu')

模型将采用形状(*,5)的输入数组和形状(*,30)的输出数组。您也可以使用input_shape而不是input_diminput_dim=5相当于input_shape=(5,)

  

model.add(密集(3))

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

另一种选择是:

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

希望这是有道理的!

答案 1 :(得分:1)

看起来像

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

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

它支持Conv2d,Linear,Activations,Element-wise操作等基础层。因此,我已将ResNet50转换为错误1e-6。

答案 2 :(得分:0)

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