tensorflow實戰(黃文堅 唐源) 學習筆記2--LeNet(on cifar10)
阿新 • • 發佈:2018-12-11
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,有時間在磕啦