Skip to content

Instantly share code, notes, and snippets.

@ijingo
Created August 5, 2016 02:33
Show Gist options
  • Save ijingo/419717d84c4666c9fa1bd3ab5b0eddf2 to your computer and use it in GitHub Desktop.
Save ijingo/419717d84c4666c9fa1bd3ab5b0eddf2 to your computer and use it in GitHub Desktop.
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python'))
from singa import layer
from singa import metric
from singa import loss
from singa import net as ffnet
from singa.proto import core_pb2
def add_layer_group(net, name, nb_filers, sample_shape=None):
net.add(layer.Conv2D(name + '_1', nb_filers, 3, 1, pad=1,
input_sample_shape=sample_shape))
net.add(layer.Activation(name + '_1'))
net.add(layer.Conv2D(name + '_2', nb_filers, 3, 1, pad=1))
net.add(layer.Activation(name + '_3'))
net.add(layer.MaxPooling2D(name, 2, 2, pad=0))
def create_vgg():
net = ffnet.FeedForwardNet(loss.SoftmaxCrossEntropy(), metric.Accuracy())
add_layer_group(net, 'conv1', 64, (3, 32, 32))
add_layer_group(net, 'conv2', 128)
add_layer_group(net, 'conv3', 256)
add_layer_group(net, 'conv4', 512)
add_layer_group(net, 'conv5', 512)
net.add(layer.Flatten('flat'))
net.add(layer.Dense('ip1', 512))
net.add(layer.Activation('relu_ip1'))
net.add(layer.Dropout('drop1'))
net.add(layer.Dense('ip2', 10))
return net
def ConvBnReLU(net, name, nb_filers, sample_shape=None):
beta_specs = {'init': 'constant', 'value': 0}
net.add(layer.Conv2D(name + '_1', nb_filers, 3, 1, pad=1,
input_sample_shape=sample_shape))
#net.add(layer.BatchNormalization(name + '_2', beta_specs=beta_specs.copy()))
net.add(layer.Activation(name + '_3'))
def create_net():
net = ffnet.FeedForwardNet(loss.SoftmaxCrossEntropy(), metric.Accuracy())
ConvBnReLU(net, 'conv1_1', 64, (3, 32, 32))
net.add(layer.Dropout('drop1', 0.3, engine='cudnn'))
ConvBnReLU(net, 'conv1_2', 64)
net.add(layer.MaxPooling2D('pool1', 2, 2, border_mode='valid'))
ConvBnReLU(net, 'conv2_1', 128)
net.add(layer.Dropout('drop2_1', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv2_2', 128)
net.add(layer.MaxPooling2D('pool2', 2, 2, border_mode='valid'))
ConvBnReLU(net, 'conv3_1', 256)
net.add(layer.Dropout('drop3_1', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv3_2', 256)
net.add(layer.Dropout('drop3_2', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv3_3', 256)
net.add(layer.MaxPooling2D('pool3', 2, 2, border_mode='valid'))
ConvBnReLU(net, 'conv4_1', 512)
net.add(layer.Dropout('drop4_1', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv4_2', 512)
net.add(layer.Dropout('drop4_2', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv4_3', 512)
net.add(layer.MaxPooling2D('pool4', 2, 2, border_mode='valid'))
ConvBnReLU(net, 'conv5_1', 512)
net.add(layer.Dropout('drop5_1', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv5_2', 512)
net.add(layer.Dropout('drop5_2', 0.4, engine='cudnn'))
ConvBnReLU(net, 'conv5_3', 512)
net.add(layer.MaxPooling2D('pool5', 2, 2, border_mode='valid'))
net.add(layer.Flatten('flat'))
net.add(layer.Dropout('drop_flat', 0.5, engine='cudnn'))
net.add(layer.Dense('ip1', 512))
beta_specs = {'init': 'constant', 'value': 0}
#net.add(layer.BatchNormalization('batchnorm_ip1', beta_specs=beta_specs.copy()))
net.add(layer.Activation('relu_ip1'))
net.add(layer.Dropout('drop_ip2', 0.5, engine='cudnn'))
net.add(layer.Dense('ip2', 10))
return net
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment