2017-10-21 161 views
1

在PyTorch中給出以下代碼Keras等效函數是什麼?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')) 

感謝

回答

4

他們都不據我所知看起來是正確的。正確的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)) 

希望這是有道理的!

+0

所以根據你的答案網絡有多少層? –

+0

2個緻密層,其中一個具有激活'relu',另一個具有'線性'。 –

+0

也有一個「隱藏的輸入圖層」,在這種情況下不會出現。如果你算這個,他們是3層。 –

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。