def mknet_gpu(*outlayers): return df.Sequential( # 3@46 df.SpatialConvolutionCUDNN(3, 24, 3, 3), # -> 24@44 df.BatchNormalization(24), df.ReLU(), df.SpatialConvolutionCUDNN(24, 24, 3, 3), # -> 24@42 df.BatchNormalization(24), df.SpatialMaxPoolingCUDNN(2, 2), # -> 24@21 df.ReLU(), df.SpatialConvolutionCUDNN(24, 48, 3, 3), # -> 48@19 df.BatchNormalization(48), df.ReLU(), df.SpatialConvolutionCUDNN(48, 48, 3, 3), # -> 48@17 df.BatchNormalization(48), df.SpatialMaxPooling(2, 2), # -> 48@9 df.ReLU(), df.SpatialConvolutionCUDNN(48, 64, 3, 3), # -> 48@7 df.BatchNormalization(64), df.ReLU(), df.SpatialConvolutionCUDNN(64, 64, 3, 3), # -> 48@5 df.BatchNormalization(64), df.ReLU(), df.Dropout(0.2), Flatten(), df.Linear(64 * 5 * 5, 512), df.ReLU(), df.Dropout(0.5), *outlayers)
def lenet(): model = df.Sequential() model.add(df.Reshape(-1, 1, 28, 28)) model.add(df.SpatialConvolutionCUDNN(1, 32, 5, 5, 1, 1, 2, 2, with_bias=False)) model.add(df.BatchNormalization(32)) model.add(df.ReLU()) model.add(df.SpatialMaxPoolingCUDNN(2, 2)) model.add(df.SpatialConvolutionCUDNN(32, 64, 5, 5, 1, 1, 2, 2, with_bias=False)) model.add(df.BatchNormalization(64)) model.add(df.ReLU()) model.add(df.SpatialMaxPoolingCUDNN(2, 2)) model.add(df.Reshape(-1, 7*7*64)) model.add(df.Linear(7*7*64, 100, with_bias=False)) model.add(df.BatchNormalization(100)) model.add(df.ReLU()) model.add(df.Dropout(0.5)) model.add(df.Linear(100, 10)) model.add(df.SoftMax()) return model
def model_head(fully_conv=True): if fully_conv: return [ df.SpatialConvolutionCUDNN(512, 4096, 7, 7, border='valid'), df.ReLU(), df.Dropout(0.5), df.SpatialConvolutionCUDNN(4096, 4096, 1, 1, border='valid'), df.ReLU(), df.Dropout(0.5), df.SpatialConvolutionCUDNN(4096, 1000, 1, 1, border='valid'), df.SpatialSoftMaxCUDNN(), ] else: return [ df.Reshape(-1, 512 * 7 * 7), df.Linear(512 * 7 * 7, 4096), df.ReLU(), df.Dropout(0.5), df.Linear(4096, 4096), df.ReLU(), df.Dropout(0.5), df.Linear(4096, 1000), df.SoftMax() ]
def model(fully_conv=True): conv3 = lambda nin, nout: df.SpatialConvolutionCUDNN( nin, nout, 3, 3, border='same') return df.Sequential(conv3(3, 64), df.ReLU(), conv3(64, 64), df.ReLU(), df.SpatialMaxPoolingCUDNN(2, 2), conv3(64, 128), df.ReLU(), conv3(128, 128), df.ReLU(), df.SpatialMaxPoolingCUDNN(2, 2), conv3(128, 256), df.ReLU(), conv3(256, 256), df.ReLU(), conv3(256, 256), df.ReLU(), df.SpatialMaxPoolingCUDNN(2, 2), conv3(256, 512), df.ReLU(), conv3(512, 512), df.ReLU(), conv3(512, 512), df.ReLU(), df.SpatialMaxPoolingCUDNN(2, 2), conv3(512, 512), df.ReLU(), conv3(512, 512), df.ReLU(), conv3(512, 512), df.ReLU(), df.SpatialMaxPoolingCUDNN(2, 2), *_vgg.model_head(fully_conv))