-
Notifications
You must be signed in to change notification settings - Fork 0
/
converter.py
57 lines (46 loc) · 1.74 KB
/
converter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Author: cc
@CreateTime: 2017-12-18T20:20:50+09:00
@Email: guangmingwu2010@gmail.com
@Copyright: go-hiroaki
@License: MIT
"""
import numpy as np
from chainer.serializers import npz
import chainer
import chainer.functions as F
import chainer.links as L
from chainer.links.caffe.caffe_function import CaffeFunction
class Alex(chainer.Chain):
"""Single-GPU AlexNet without partition toward the channel axis."""
insize = 227
def __init__(self, nb_class=1000):
super(Alex, self).__init__()
with self.init_scope():
self.conv1 = L.Convolution2D(None, 96, 11, stride=4)
self.conv2 = L.Convolution2D(None, 256, 5, pad=2)
self.conv3 = L.Convolution2D(None, 384, 3, pad=1)
self.conv4 = L.Convolution2D(None, 384, 3, pad=1)
self.conv5 = L.Convolution2D(None, 256, 3, pad=1)
self.fc6 = L.Linear(None, 4096)
self.fc7 = L.Linear(None, 4096)
self.fc8 = L.Linear(None, nb_class)
def __call__(self, x, t):
h = F.max_pooling_2d(F.local_response_normalization(
F.relu(self.conv1(x))), 3, stride=2)
h = F.max_pooling_2d(F.local_response_normalization(
F.relu(self.conv2(h))), 3, stride=2)
h = F.relu(self.conv3(h))
h = F.relu(self.conv4(h))
h = F.max_pooling_2d(F.relu(self.conv5(h)), 3, stride=2)
h = F.dropout(F.relu(self.fc6(h)))
h = F.dropout(F.relu(self.fc7(h)))
h = self.fc8(h)
return h
if __name__ == "__main__":
caffemodel = CaffeFunction("bvlc_alexnet.caffemodel")
npz.save_npz("alexnet.npz", caffemodel, compression=False)
alexnet = Alex()
npz.load_npz("alexnet.npz", alexnet)