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_dim
。 input_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))
给定 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_dim
。 input_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))