-
Notifications
You must be signed in to change notification settings - Fork 17
/
architectures.py
116 lines (109 loc) · 5.67 KB
/
architectures.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import tensorflow as tf
class Architecture():
def __init__(self,
inputSize,
squareFilters,
rectangularFilters,
numberOfFilters,
kernelSizes,
poolSizes,
poolStrides):
self.inputSize = inputSize
self.poolStrides = poolStrides
self.squareFilters = squareFilters
self.rectangularFilters = rectangularFilters
self.numberOfFilters = numberOfFilters
self.kernelSizes = kernelSizes
self.poolSizes = poolSizes
def makeModel(self,imageInput):
if imageInput.shape[1] != self.inputSize:
imageInput = tf.image.resize_bilinear(imageInput, [self.inputSize]*2)
horizontalKernels = tf.layers.conv2d(inputs = imageInput,
filters = self.rectangularFilters,
kernel_size = [self.kernelSizes[0]*2,
self.kernelSizes[0]/2],
padding = "same",
activation = tf.nn.relu,
strides = 1)
verticalKernels = tf.layers.conv2d(inputs = imageInput,
filters = self.rectangularFilters,
kernel_size = [self.kernelSizes[0]/2,
self.kernelSizes[0]*2],
padding = "same",
activation = tf.nn.relu,
strides = 1)
squareKernels = tf.layers.conv2d(inputs = imageInput,
filters = self.squareFilters,
kernel_size = [self.kernelSizes[0],
self.kernelSizes[0]],
padding = "same",
activation = tf.nn.relu,
strides = 1)
c1 = tf.concat([horizontalKernels,verticalKernels,squareKernels], axis = 3)
c1 = tf.layers.max_pooling2d(inputs = c1,
pool_size = self.poolSizes[0],
strides = self.poolStrides[0],
padding = "same")
numberOfFilters = self.numberOfFilters
kernelSizes = self.kernelSizes[1:]
poolSizes = self.poolSizes[1:]
poolStrides = self.poolStrides[1:]
nextInput = c1
for filterCount,kernelSize,poolSize,poolStride in zip(numberOfFilters,kernelSizes,poolSizes,poolStrides):
c1 = tf.layers.conv2d(inputs = nextInput,
filters = filterCount,
kernel_size = [kernelSize,kernelSize],
padding = "same",
activation = tf.nn.relu,
strides = 1)
c1 = tf.layers.max_pooling2d(inputs = c1,
pool_size = poolSize,
strides = poolStride,
padding = "same")
nextInput = c1
return nextInput
architectures = {}
architectures["original"] = Architecture(256,
12,4,
numberOfFilters = [10],
kernelSizes = [8,8],
poolSizes = [8,4],
poolStrides = [4,4])
architectures["v1"] = Architecture(256,
20,2,
numberOfFilters = [10],
kernelSizes = [8,8],
poolSizes = [8,4],
poolStrides = [4,4])
architectures["v2"] = Architecture(256,
20,2,
numberOfFilters = [8,8],
kernelSizes = [8,4,2],
poolSizes = [2,4,2],
poolStrides = [2,4,2])
architectures['v3'] = Architecture(128,
20,2,
numberOfFilters = [10],
kernelSizes = [4,4],
poolSizes = [4,4],
poolStrides = [2,4])
architectures['v4'] = Architecture(128,
32,2,
numberOfFilters = [10],
kernelSizes = [4,4],
poolSizes = [4,4],
poolStrides = [2,4])
architectures['v5'] = Architecture(256,
32,2,
numberOfFilters = [10],
kernelSizes = [8,8],
poolSizes = [8,4],
poolStrides = [4,4])
architectures['v5'] = Architecture(256,
32,2,
numberOfFilters = [15],
kernelSizes = [8,8],
poolSizes = [8,4],
poolStrides = [4,4])
# v1 was a little bit better
architectures["original"] = architectures["v1"]