鉴于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'))
由于
答案 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_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))
希望这是有道理的!
答案 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))