首页 文章

Pytorch到Keras代码等价

提问于
浏览
2

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

谢谢

2 回答

  • 1

    根据我的知识,它们都不正确 . 正确的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_dim . input_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))
    

    希望这是有道理的!

  • 6

    看起来像一个

    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 .

相关问题