Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将简单的cnn从keras转换为pytorch_Keras_Pytorch - Fatal编程技术网

将简单的cnn从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

有人能帮我把这个模型换成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_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型号。
你们可以在这里学习这个例子