# Liniarize II nn = FeedForward([ LinearizeLayer(32, 32, 3), FullyConnected(32 * 32 * 3, 300, identity), Tanh(), FullyConnected(300, 200, identity), Tanh(), FullyConnected(200, 10, identity), SoftMax() ]) # # Convolutional I nn = FeedForward([ ConvolutionalLayer(3, 32, 32, 6, 5, 1), MaxPoolingLayer(2), ReluLayer(), ConvolutionalLayer(6, 14, 14, 16, 5, 1), MaxPoolingLayer(2), ReluLayer(), LinearizeLayer(16, 5, 5), FullyConnected(400, 300, relu), FullyConnected(300, 10, relu), SoftMax() ]) # Convolutional II # nn = FeedForward([ # ConvolutionalLayer(3, 32, 32, 6, 5, 1), # ReluLayer(), # ConvolutionalLayer(6, 28, 28, 16, 5, 1),
def __init__(self): # Lenet # input: 28x28 # conv1: (5x5x6)@s1p2 -> 28x28x6 {(28-5+2x2)/1+1} # maxpool2: (2x2)@s2 -> 14x14x6 {(28-2)/2+1} # conv3: (5x5x16)@s1p0 -> 10x10x16 {(14-5)/1+1} # maxpool4: (2x2)@s2 -> 5x5x16 {(10-2)/2+1} # conv5: (5x5x120)@s1p0 -> 1x1x120 {(5-5)/1+1} # fc6: 120 -> 84 # fc7: 84 -> 10 # softmax: 10 -> 10 lr = 0.01 self.layers = [] self.layers.append( ConvolutionLayer(inputs_channel=1, num_filters=6, width=5, height=5, padding=2, stride=1, learning_rate=lr, name='conv1')) self.layers.append(ReLu()) self.layers.append( MaxPoolingLayer(width=2, height=2, stride=2, name='maxpool2')) self.layers.append( ConvolutionLayer(inputs_channel=6, num_filters=16, width=5, height=5, padding=0, stride=1, learning_rate=lr, name='conv3')) self.layers.append(ReLu()) self.layers.append( MaxPoolingLayer(width=2, height=2, stride=2, name='maxpool4')) self.layers.append( ConvolutionLayer(inputs_channel=16, num_filters=120, width=5, height=5, padding=0, stride=1, learning_rate=lr, name='conv5')) self.layers.append(ReLu()) self.layers.append(Flatten()) self.layers.append( FullyConnectedLayer(num_inputs=120, num_outputs=84, learning_rate=lr, name='fc6')) self.layers.append(ReLu()) self.layers.append( FullyConnectedLayer(num_inputs=84, num_outputs=10, learning_rate=lr, name='fc7')) self.layers.append(Softmax()) self.lay_num = len(self.layers)