将简单的cnn从keras转换为pytorch
有人能帮我把这个模型换成PyTorch吗?我已经试着像这样从Keras转换到PyTorch,但训练结果不同。多谢各位将简单的cnn从keras转换为pytorch,keras,pytorch,Keras,Pytorch,有人能帮我把这个模型换成PyTorch吗?我已经试着像这样从Keras转换到PyTorch,但训练结果不同。多谢各位 input_3d = (1, 64, 96, 96) pool_3d = (2, 2, 2) model = Sequential() model.add(Convolution3D(8, 3, 3, 3, name='conv1', input_shape=input_3d, data_format='channels_fir
input_3d = (1, 64, 96, 96)
pool_3d = (2, 2, 2)
model = Sequential()
model.add(Convolution3D(8, 3, 3, 3, name='conv1', input_shape=input_3d,
data_format='channels_first'))
model.add(MaxPooling3D(pool_size=pool_3d, name='pool1'))
model.add(Convolution3D(8, 3, 3, 3, name='conv2',data_format='channels_first'))
model.add(MaxPooling3D(pool_size=pool_3d, name='pool2'))
model.add(Convolution3D(8, 3, 3, 3, name='conv3',data_format='channels_first'))
model.add(MaxPooling3D(pool_size=pool_3d, name='pool3'))
model.add(Flatten())
model.add(Dense(2000, activation='relu', name='dense1'))
model.add(Dropout(0.5, name='dropout1'))
model.add(Dense(500, activation='relu', name='dense2'))
model.add(Dropout(0.5, name='dropout2'))
model.add(Dense(3, activation='softmax', name='softmax'))
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1 (Conv3D) (None, 8, 60, 94, 94) 224
_________________________________________________________________
pool1 (MaxPooling3D) (None, 8, 30, 47, 47) 0
_________________________________________________________________
conv2 (Conv3D) (None, 8, 28, 45, 45) 1736
_________________________________________________________________
pool2 (MaxPooling3D) (None, 8, 14, 22, 22) 0
_________________________________________________________________
conv3 (Conv3D) (None, 8, 12, 20, 20) 1736
_________________________________________________________________
pool3 (MaxPooling3D) (None, 8, 6, 10, 10) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 4800) 0
_________________________________________________________________
dense1 (Dense) (None, 2000) 9602000
_________________________________________________________________
dropout1 (Dropout) (None, 2000) 0
_________________________________________________________________
dense2 (Dense) (None, 500) 1000500
_________________________________________________________________
dropout2 (Dropout) (None, 500) 0
_________________________________________________________________
softmax (Dense) (None, 3) 1503
=================================================================
您的Pytork等效Keras模型如下所示:
类别CNN(nn.模块):
定义初始值(self,):
超级(美国有线电视新闻网,赛尔夫)。\uuuuu init\uuuuuuuu()
self.maxpool=nn.MaxPool3d((2,2,2))
self.conv1=nn.Conv3d(输入通道=1,输出通道=8,内核大小=3)
self.conv2=nn.Conv3d(输入通道=8,输出通道=8,内核大小=3)
self.conv3=nn.Conv3d(输入通道=8,输出通道=8,内核大小=3)
self.linear1=nn.Linear(48002000)
self.dropout1=nn.Dropout3d(0.5)
self.linear2=nn.Linear(2000500)
self.dropout2=nn.Dropout3d(0.5)
自线性3=nn线性(500,3)
def前进(自身,x):
out=self.maxpool(self.conv1(x))
out=self.maxpool(self.conv2(out))
out=self.maxpool(self.conv3(out))
#压扁工艺
b、 c、d、h、w=输出尺寸()#批次尺寸、通道、深度、高度、宽度
out=out.view(-1,c*d*h*w)
out=自退学1(自线性1(out))
退出=自退出2(自线性2(退出))
out=自线性3(out)
out=火炬.软最大值(out,1)
返回
用于测试模型的驱动程序:
inputs=torch.randn(8,1,64,96,96)
模型=CNN()
输出=模型(输入)
打印(输出.形状)#火炬.尺寸([8,3])
您可以保存keras重量,然后在pytorch中重新加载。
步骤如下第0步:在Keras中培训模型
步骤1:在PyTorch中重新创建并初始化模型架构
步骤2:导入Keras模型并复制权重
第3步:将这些重量加载到PyTorch模型上
步骤4:测试并保存Pytorch型号。
你们可以在这里学习这个例子