【发布时间】:2021-04-27 05:48:39
【问题描述】:
我正在尝试将以下 3D CNN 架构从 keras 转换为 pytorch。 3D 图像均具有以下尺寸:193 x 229 x 193。
Keras 中的网络架构:
def test_model(size):
model = Sequential()
model.add(Conv3D(filters=8,
kernel_size=(3, 3, 3),
activation='relu',
input_shape=size,
name="conv_1_1"))
model.add(Conv3D(filters=8,
kernel_size=(3, 3, 3),
activation='relu',
name="conv_1_2"))
model.add(MaxPooling3D(pool_size=(2, 2, 2),
strides=(2, 2, 2)))
model.add(Conv3D(filters=16,
kernel_size=(3, 3, 3),
activation='relu',
input_shape=size,
name="conv_2_1"))
model.add(Conv3D(filters=16,
kernel_size=(3, 3, 3),
activation='relu',
name="conv_2_2"))
model.add(MaxPooling3D(pool_size=(2, 2, 2),
strides=(2, 2, 2)))
model.add(Flatten())
model.add(Dense(units=1,
name="d_2"))
return model
我尝试将其转换为 Pytorch:
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv3d(input_channel=1, output_channel=8, kernel_size=3)
self.conv2 = nn.Conv3d(input_channel=8, output_channel=8, kernel_size=3)
self.conv3 = nn.Conv3d(input_channel=8, output_channel=16, kernel_size=3)
self.conv4 = nn.Conv3d(input_channel=16, output_channel=16, kernel_size=3)
self.fc1 = nn.Linear( ???? , 1)
def forward (self, x):
x = F.relu(self.conv1(x))
x = F.relu(F.max_pool3d(self.conv2(x), kernel_size=2, stride=2))
x = F.relu(self.conv3(x))
x = F.relu(F.max_pool3d(self.conv4(x), kernel_size=2, stride=2))
x = self.fc1
return x
net = Model()
请您让我知道我在哪里犯了错误,并澄清如何确定 nn.Linear( ???? , 2) 层的输入?感谢您的帮助!
【问题讨论】:
标签: keras pytorch conv-neural-network