Commit 696a7db7 authored by Yuxin Wu's avatar Yuxin Wu

loyal config

parent 27134e15
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
# File: example_cifar10.py # File: loyaltry.py
# Author: Yuxin Wu <ppwwyyxx@gmail.com> # Author: Yuxin Wu <ppwwyyxx@gmail.com>
import tensorflow as tf import tensorflow as tf
...@@ -16,41 +16,45 @@ from tensorpack.utils.symbolic_functions import * ...@@ -16,41 +16,45 @@ from tensorpack.utils.symbolic_functions import *
from tensorpack.utils.summary import * from tensorpack.utils.summary import *
from tensorpack.dataflow import * from tensorpack.dataflow import *
from tensorpack.dataflow import imgaug from tensorpack.dataflow import imgaug
from cifar10 import cifar10
BATCH_SIZE = 128 BATCH_SIZE = 128
MIN_AFTER_DEQUEUE = 20000 # a large number, as in the official example MIN_AFTER_DEQUEUE = 20000 # a large number, as in the official example
CAPACITY = MIN_AFTER_DEQUEUE + 3 * BATCH_SIZE CAPACITY = MIN_AFTER_DEQUEUE + 3 * BATCH_SIZE
def get_model(inputs, is_training): def get_model(inputs, is_training):
is_training = bool(is_training) #keep_prob = tf.constant(0.5 if is_training else 1.0)
keep_prob = tf.constant(0.5 if is_training else 1.0)
image, label = inputs image, label = inputs
if is_training: # slow? if is_training:
image, label = tf.train.shuffle_batch( image, label = tf.train.shuffle_batch(
[image, label], BATCH_SIZE, CAPACITY, MIN_AFTER_DEQUEUE, [image, label], BATCH_SIZE, CAPACITY, MIN_AFTER_DEQUEUE,
num_threads=6, enqueue_many=False) num_threads=6, enqueue_many=False)
## augmentations tf.image_summary("train_image", image, 10)
#image, label = tf.train.slice_input_producer(
#[image, label], name='slice_queue') l = Conv2D('conv1', image, out_channel=64, kernel_shape=5, padding='SAME',
#image = tf.image.random_brightness(image, 0.1) W_init=tf.truncated_normal_initializer(stddev=1e-4))
#image, label = tf.train.shuffle_batch(
#[image, label], BATCH_SIZE, CAPACITY, MIN_AFTER_DEQUEUE,
#num_threads=2, enqueue_many=False)
l = Conv2D('conv0', image, out_channel=64, kernel_shape=5, padding='SAME')
l = MaxPooling('pool0', l, 3, stride=2, padding='SAME')
l = tf.nn.lrn(l, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm0')
l = Conv2D('conv1', l, out_channel=64, kernel_shape=5, padding='SAME')
l = tf.nn.lrn(l, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm1')
l = MaxPooling('pool1', l, 3, stride=2, padding='SAME') l = MaxPooling('pool1', l, 3, stride=2, padding='SAME')
l = tf.nn.lrn(l, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm1')
l = Conv2D('conv2', l, out_channel=64, kernel_shape=5, padding='SAME',
W_init=tf.truncated_normal_initializer(stddev=1e-4),
b_init=tf.constant_initializer(0.1))
l = tf.nn.lrn(l, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm2')
l = MaxPooling('pool2', l, 3, stride=2, padding='SAME')
l = FullyConnected('fc0', l, 384,
W_init=tf.truncated_normal_initializer(stddev=0.04),
b_init=tf.constant_initializer(0.1))
l = FullyConnected('fc1', l, out_dim=192,
W_init=tf.truncated_normal_initializer(stddev=0.04),
b_init=tf.constant_initializer(0.1))
## fc will have activation summary by default. disable this for the output layer
logits = FullyConnected('linear', l, out_dim=10, summary_activation=False,
nl=tf.identity,
W_init=tf.truncated_normal_initializer(stddev=1.0/192))
l = FullyConnected('fc0', l, 384)
l = FullyConnected('fc1', l, out_dim=192)
# fc will have activation summary by default. disable this for the output layer
logits = FullyConnected('fc2', l, out_dim=10, summary_activation=False, nl=tf.identity)
prob = tf.nn.softmax(logits, name='output') prob = tf.nn.softmax(logits, name='output')
y = one_hot(label, 10) y = one_hot(label, 10)
...@@ -68,13 +72,13 @@ def get_model(inputs, is_training): ...@@ -68,13 +72,13 @@ def get_model(inputs, is_training):
MOVING_SUMMARY_VARS_KEY, tf.reduce_mean(wrong, name='train_error')) MOVING_SUMMARY_VARS_KEY, tf.reduce_mean(wrong, name='train_error'))
# weight decay on all W of fc layers # weight decay on all W of fc layers
wd_cost = tf.mul(1e-4, wd_cost = tf.mul(0.004,
regularize_cost('fc.*/W', tf.nn.l2_loss), regularize_cost('fc.*/W', tf.nn.l2_loss),
name='regularize_loss') name='regularize_loss')
tf.add_to_collection(MOVING_SUMMARY_VARS_KEY, wd_cost) tf.add_to_collection(MOVING_SUMMARY_VARS_KEY, wd_cost)
add_param_summary('.*') # monitor all variables add_param_summary('.*') # monitor all variables
return [prob, nr_wrong], tf.add_n([wd_cost, cost], name='cost') return [prob, nr_wrong], tf.add_n([cost, wd_cost], name='cost')
def get_config(): def get_config():
basename = os.path.basename(__file__) basename = os.path.basename(__file__)
...@@ -85,23 +89,21 @@ def get_config(): ...@@ -85,23 +89,21 @@ def get_config():
augmentors = [ augmentors = [
RandomCrop((24, 24)), RandomCrop((24, 24)),
Flip(horiz=True), Flip(horiz=True),
BrightnessAdd(0.25), BrightnessAdd(63),
Contrast((0.2,1.8)), Contrast((0.2,1.8)),
PerImageWhitening() PerImageWhitening(all_channel=True)
] ]
dataset_train = AugmentImageComponent(dataset_train, augmentors) dataset_train = AugmentImageComponent(dataset_train, augmentors)
dataset_train = BatchData(dataset_train, 128) dataset_train = BatchData(dataset_train, 128)
augmentors = [ augmentors = [
CenterCrop((24, 24)), CenterCrop((24, 24)),
PerImageWhitening() PerImageWhitening(all_channel=True)
] ]
dataset_test = dataset.Cifar10('test') dataset_test = dataset.Cifar10('test')
dataset_test = AugmentImageComponent(dataset_test, augmentors) dataset_test = AugmentImageComponent(dataset_test, augmentors)
dataset_test = BatchData(dataset_test, 128) dataset_test = BatchData(dataset_test, 128)
step_per_epoch = dataset_train.size() step_per_epoch = dataset_train.size()
#step_per_epoch = 20
#dataset_test = FixedSizeData(dataset_test, 20)
sess_config = get_default_sess_config() sess_config = get_default_sess_config()
sess_config.gpu_options.per_process_gpu_memory_fraction = 0.5 sess_config.gpu_options.per_process_gpu_memory_fraction = 0.5
......
...@@ -19,8 +19,9 @@ def FullyConnected(x, out_dim, W_init=None, b_init=None, nl=tf.nn.relu): ...@@ -19,8 +19,9 @@ def FullyConnected(x, out_dim, W_init=None, b_init=None, nl=tf.nn.relu):
if W_init is None: if W_init is None:
W_init = tf.truncated_normal_initializer(stddev=1.0 / math.sqrt(float(in_dim))) W_init = tf.truncated_normal_initializer(stddev=1.0 / math.sqrt(float(in_dim)))
if b_init is None: if b_init is None:
b_init = tf.constant_initializer() b_init = tf.constant_initializer(0.0)
W = tf.get_variable('W', [in_dim, out_dim], initializer=W_init) with tf.device('/cpu:0'):
b = tf.get_variable('b', [out_dim], initializer=b_init) W = tf.get_variable('W', [in_dim, out_dim], initializer=W_init)
b = tf.get_variable('b', [out_dim], initializer=b_init)
return nl(tf.nn.xw_plus_b(x, W, b), name=tf.get_variable_scope().name + '_output') return nl(tf.nn.xw_plus_b(x, W, b), name=tf.get_variable_scope().name + '_output')
...@@ -28,5 +28,7 @@ def regularize_cost(regex, func): ...@@ -28,5 +28,7 @@ def regularize_cost(regex, func):
if re.search(regex, name): if re.search(regex, name):
costs.append(func(p)) costs.append(func(p))
_log_regularizer(name) _log_regularizer(name)
if not costs:
return 0
return tf.add_n(costs) return tf.add_n(costs)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment