tensorflow实战(黄文坚 唐源) 学习笔记2--LeNet(on cifar10)

concept

baseline和benchmark有什么区别?

一般用benchmark data 做实验,测试A B C D四个模型,然后以结果最差的一个模型,假设是C,作为baseline,看看其他模型相对C提高了多少。

cifar-10

详细的benchmark 和排名在 classification datasets results 上
这里

inference

「開學了」——正是形容正在「訓練」階段的深度神經網絡最貼切的狀態。神經網絡和所有的學生一樣,通過接受教育,來學習如何完成工作。

確切的說,訓練好的神經網絡,可以根據其所學,在數字化的世界中輕鬆地完成各種各樣的工作,如:識別圖像、識別記錄口述的語言、檢測血液中的疾病,或者推薦符合某人風格的一雙鞋子等等。此時的神經網絡,由於經過了完善的訓練,可以快速高效地從新的數據中「推斷」各種結論。在人工智慧術語中,稱之為「推斷」(Inference)

原文網址:https://kknews.cc/zh-tw/tech/yzp6pa.html

implement trick

1 math.ceil

# python code
import math
math.ceil(x)  此为, 进一法(除了x==整数,整数则保留原样)

2 data augmentation

#水平翻转
tf.image.random_flip_left_right
#随机剪切 固定大小的图片 e.x. 24x24
tf.random_crop
#随机亮度 对比度
tf.image.random_brightness
tf.image.random_contrast
#对数据标准化
tf.image.per_image_whitening

3 初始化weight 并加入L2 regularization(collection)

def variable_with_weight_loss(shape,stddev,wl):
	var = tf.Variable(tf.truncated_normal(shape,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

不必所有卷积层都加

wl = 0, 不加 L2
wl > 0, 加 L2

4 卷积层的kernel shape

variable_with_weight_loss(shape=[5,5,3,64],stddev=5e-2,wl=0)

[5,5,3,64]
5 x 5 x 3 kernel 大小啊,有64个。。。 健忘如我

5

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' )

最后的
pool1 = tf.nn.max_pool(conv1, ksize = [1,3,3,1], strides=[1,2,2,1], padding=‘SAME’ )
ksize 池化kernel大小 3x3
往右走 2 步, 往下走 2 步
ksize = [1,3,3,1], strides=[1,2,2,1]

loss放到collection计算

def lossFcn( 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' )

快速求accuracy

top_k_op = tf.nn.in_top_k(logits,label_holder,1)

多线程运作

tf.train.start_queque_runners()






“<\b\r/>\” 强行换行

时间不够,就用了别人的code,有时间在磕啦

code

猜你喜欢

转载自blog.csdn.net/weixin_38699659/article/details/84798749