update code and readme
This commit is contained in:
54
model.py
54
model.py
@@ -84,57 +84,3 @@ class ConvNet(nn.Module):
|
|||||||
m.weight.data.normal_(0, 0.01)
|
m.weight.data.normal_(0, 0.01)
|
||||||
m.bias.data.zero_()
|
m.bias.data.zero_()
|
||||||
|
|
||||||
class ConvNet2(nn.Module):
|
|
||||||
def __init__(self, num_classes):
|
|
||||||
super(ConvNet2, self).__init__()
|
|
||||||
self.features = nn.Sequential(
|
|
||||||
nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.LeakyReLU(inplace=True),
|
|
||||||
nn.MaxPool2d(kernel_size=2, stride=2),
|
|
||||||
nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.LeakyReLU(inplace=True),
|
|
||||||
nn.MaxPool2d(kernel_size=2, stride=2),
|
|
||||||
nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.LeakyReLU(inplace=True),
|
|
||||||
nn.MaxPool2d(kernel_size=2, stride=2),
|
|
||||||
nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1),
|
|
||||||
nn.LeakyReLU(inplace=True),
|
|
||||||
nn.MaxPool2d(kernel_size=2, stride=2),
|
|
||||||
)
|
|
||||||
self.classifier = nn.Sequential(
|
|
||||||
nn.Linear(512*4*4, 4096),
|
|
||||||
# nn.Dropout(),
|
|
||||||
nn.ReLU(inplace=True),
|
|
||||||
nn.Linear(4096, num_classes),
|
|
||||||
)
|
|
||||||
self.weight_init()
|
|
||||||
|
|
||||||
def forward(self, x):
|
|
||||||
x = self.features(x)
|
|
||||||
x = x.view(x.size(0), -1)
|
|
||||||
x = self.classifier(x)
|
|
||||||
return x
|
|
||||||
|
|
||||||
def weight_init(self):
|
|
||||||
for layer in self.features:
|
|
||||||
self._layer_init(layer)
|
|
||||||
for layer in self.classifier:
|
|
||||||
self._layer_init(layer)
|
|
||||||
|
|
||||||
|
|
||||||
def _layer_init(self, m):
|
|
||||||
# 使用isinstance来判断m属于什么类型
|
|
||||||
if isinstance(m, nn.Conv2d):
|
|
||||||
n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
|
|
||||||
m.weight.data.normal_(0, np.sqrt(2. / n))
|
|
||||||
elif isinstance(m, nn.BatchNorm2d):
|
|
||||||
# m中的weight,bias其实都是Variable,为了能学习参数以及后向传播
|
|
||||||
m.weight.data.fill_(1)
|
|
||||||
m.bias.data.zero_()
|
|
||||||
elif isinstance(m, nn.Linear):
|
|
||||||
# n = m.weight.size(1)
|
|
||||||
m.weight.data.normal_(0, 0.01)
|
|
||||||
m.bias.data.zero_()
|
|
||||||
# init.xavier_normal_(m.weight)
|
|
||||||
2
train.py
2
train.py
@@ -97,7 +97,7 @@ if __name__ == "__main__":
|
|||||||
print("测试集数据:", dataset.test_size)
|
print("测试集数据:", dataset.test_size)
|
||||||
trainloader, testloader = dataset.get_loader(batch_size)
|
trainloader, testloader = dataset.get_loader(batch_size)
|
||||||
|
|
||||||
net = ConvNet2(num_classes)
|
net = ConvNet(num_classes)
|
||||||
print('网络结构:\n', net)
|
print('网络结构:\n', net)
|
||||||
if torch.cuda.is_available():
|
if torch.cuda.is_available():
|
||||||
net = net.cuda()
|
net = net.cuda()
|
||||||
|
|||||||
Reference in New Issue
Block a user