1. 程式人生 > >tensorflow實戰(黃文堅 唐源) 學習筆記2--LeNet(on cifar10)

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