代码及注释
import cifar10,cifar10_input
import tensorflow as tf
import numpy as np
import time
import os
max_steps = 3000
batch_size = 128
data_dir = './cifar-10-batches-bin'
def variable_with_weight_loss(shape, stddev, wl):
var = tf.Variable(tf.truncated_normal(shape, stddev=stddev))
if wl is not None:
weight_loss = tf.multiply(tf.nn.l2_loss(var),wl,name='weight_loss')
tf.add_to_collection('losses',weight_loss)
return var
images_train, labels_train = cifar10_input.distorted_inputs(data_dir = data_dir,batch_size=batch_size)
images_test,labels_test = cifar10_input.inputs(eval_data=True,data_dir=data_dir,batch_size = batch_size)
Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
image_holder = tf.placeholder(tf.float32, [batch_size,24,24,3])
label_holder = tf.placeholder(tf.int32,[batch_size])
weight1 = variable_with_weight_loss(shape=[5,5,3,64],stddev = 5e-2,wl=0.0)
kernel1 = tf.nn.conv2d(image_holder,weight1,[1,1,1,1],padding='SAME')
bias1 = tf.Variable(tf.constant(0.0,shape=[64]))
conv1 = tf.nn.relu(tf.nn.bias_add(kernel1,bias1))
pool1 = tf.nn.max_pool(conv1,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
norm1 = tf.nn.lrn(pool1,4,bias=1.0,alpha=0.001/9.0,beta=0.75)
weight2 = variable_with_weight_loss(shape=[5,5,64,64],stddev=5e-2,wl=0.0)
kernel2 = tf.nn.conv2d(norm1,weight2,[1,1,1,1],padding='SAME')
bias2 = tf.Variable(tf.constant(0.1,shape=[64]))
conv2 = tf.nn.relu(tf.nn.bias_add(kernel2,bias2))
norm2 = tf.nn.lrn(conv2,4,bias=1.0,alpha=0.001/9.0,beta=0.75)
pool2 = tf.nn.max_pool(norm2,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
reshape = tf.reshape(pool2,[batch_size,-1])
dim = reshape.get_shape()[1].value
weight3 = variable_with_weight_loss(shape=[dim,384],stddev=0.04,wl=0.004)
bias3 = tf.Variable(tf.constant(0.1,shape=[384]))
local3 = tf.nn.relu(tf.matmul(reshape,weight3)+bias3)
weight4 = variable_with_weight_loss(shape=[384,192],stddev=0.04,wl=0.004)
bias4 = tf.Variable(tf.constant(0.1,shape=[192]))
local4 = tf.nn.relu(tf.matmul(local3,weight4)+bias4)
weight5 = variable_with_weight_loss(shape = [192,10],stddev = 1/192.0,wl=0.0)
bias5 = tf.Variable(tf.constant(0.0,shape=[10]))
logits = tf.add(tf.matmul(local4,weight5),bias5)
def loss(logits,labels):
labels = tf.cast(labels,tf.int64)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits= logits,labels=labels,name='cross_entropy_per_example')
cross_entropy_mean = tf.reduce_mean(cross_entropy,name='cross_entropy')
tf.add_to_collection('losses',cross_entropy_mean)
return tf.add_n(tf.get_collection('losses'),name='total_loss')
loss = loss(logits,label_holder)
train_op = tf.train.AdamOptimizer(1e-3).minimize(loss)
top_k_op = tf.nn.in_top_k(logits,label_holder,1)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.train.start_queue_runners()
for step in range(max_steps):
start_time = time.time()
image_batch,label_batch = sess.run([images_train,labels_train])
_,loss_value = sess.run([train_op,loss],feed_dict={image_holder:image_batch,label_holder:label_batch})
duration = time.time() - start_time
if step % 10 == 0:
examples_per_sec = batch_size / duration
sec_per_batch = float(duration)
format_str=('step %d ,loss=%.2f (%.1f examples/sec;%.3f sec/batch)')
print(format_str % (step,loss_value,examples_per_sec,sec_per_batch))
step 0 ,loss=6.87 (93.3 examples/sec;1.371 sec/batch)
step 10 ,loss=5.08 (110.8 examples/sec;1.155 sec/batch)
step 20 ,loss=3.99 (105.6 examples/sec;1.212 sec/batch)
step 30 ,loss=3.23 (106.9 examples/sec;1.198 sec/batch)
step 40 ,loss=2.84 (110.4 examples/sec;1.159 sec/batch)
step 50 ,loss=2.51 (105.7 examples/sec;1.211 sec/batch)
step 60 ,loss=2.23 (107.6 examples/sec;1.190 sec/batch)
step 70 ,loss=2.08 (105.6 examples/sec;1.212 sec/batch)
step 80 ,loss=2.06 (107.8 examples/sec;1.187 sec/batch)
step 90 ,loss=1.93 (104.0 examples/sec;1.230 sec/batch)
step 100 ,loss=2.10 (105.3 examples/sec;1.216 sec/batch)
step 110 ,loss=1.98 (93.8 examples/sec;1.364 sec/batch)
step 120 ,loss=2.11 (99.4 examples/sec;1.288 sec/batch)
step 130 ,loss=1.89 (67.0 examples/sec;1.910 sec/batch)
step 140 ,loss=1.80 (107.4 examples/sec;1.192 sec/batch)
step 150 ,loss=1.83 (95.1 examples/sec;1.346 sec/batch)
step 160 ,loss=2.12 (105.0 examples/sec;1.219 sec/batch)
step 170 ,loss=1.69 (108.3 examples/sec;1.182 sec/batch)
step 180 ,loss=1.89 (101.4 examples/sec;1.263 sec/batch)
step 190 ,loss=1.93 (109.2 examples/sec;1.172 sec/batch)
step 200 ,loss=1.66 (107.0 examples/sec;1.197 sec/batch)
step 210 ,loss=1.77 (107.9 examples/sec;1.186 sec/batch)
step 220 ,loss=1.71 (110.9 examples/sec;1.154 sec/batch)
step 230 ,loss=1.55 (108.0 examples/sec;1.185 sec/batch)
step 240 ,loss=1.54 (104.9 examples/sec;1.220 sec/batch)
step 250 ,loss=1.53 (106.9 examples/sec;1.197 sec/batch)
step 260 ,loss=1.73 (105.2 examples/sec;1.217 sec/batch)
step 270 ,loss=1.66 (111.3 examples/