實(shí)驗(yàn)步驟:
1.獲得數(shù)據(jù):實(shí)驗(yàn)只用了1000個(gè)數(shù)據(jù)漂辐,另外在celebA數(shù)據(jù)集上多加了兩個(gè)標(biāo)簽(有無左耳/右耳)
2.生成訓(xùn)練和測試用的 tfrecords 文件
3.定義網(wǎng)絡(luò)結(jié)構(gòu) (這里用的是類似于 mobilenetv2 的網(wǎng)絡(luò)結(jié)構(gòu))
3.softmax多標(biāo)簽分類
PART 1
mobilenetv2:將普通卷積操作因式分解為一個(gè)深度卷積(depthwise conv)和逐點(diǎn)卷積(pointwise conv),深度卷積只與輸入的每一個(gè)channel作卷積迅细,逐點(diǎn)卷積負(fù)責(zé)將深度卷積按通道融合。
![bottleneck res_block](https://i.loli.net/2018/12/24/5c2090a37b8ee.png)
卷積操作后進(jìn)行Relu變換會丟失很多信息,可以先把特征映射到高維空間(上圖中t為expand rate)再Relu,就不會丟失太多有用的信息别洪。
![幾種卷積操作的比較](https://i.loli.net/2018/12/24/5c2090a39809e.png)
實(shí)驗(yàn)中用的網(wǎng)絡(luò)結(jié)構(gòu):
![網(wǎng)絡(luò)結(jié)構(gòu)](https://i.loli.net/2018/12/24/5c208a8078371.png)
PART 2
sigmoid 函數(shù)用于多標(biāo)簽分類時(shí):
把每一個(gè)元素映射到 [0,1] 之間,每個(gè)標(biāo)簽獨(dú)立柳刮,但不互斥挖垛。
logits = mobilenetv2(x, num_class, is_train) # num_class=42
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits, labels=y_))
softmax 函數(shù)用于多標(biāo)簽分類時(shí):
計(jì)算每個(gè)元素的概率,每個(gè)元素的概率之和為1秉颗,要求每個(gè)標(biāo)簽互斥痢毒。
logits = mobilenetv2(x, num_class, is_train) # num_class=80
pre = tf.reshape(logits, [-1, 84, 2])
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pre, labels=y_))
PART 3
實(shí)驗(yàn)只用了1000個(gè)數(shù)據(jù),另外在celebA數(shù)據(jù)集上多加了兩個(gè)標(biāo)簽(有無左耳/右耳)蚕甥,其中900個(gè)用于訓(xùn)練哪替,100個(gè)用作驗(yàn)證,迭代2001次菇怀,訓(xùn)練準(zhǔn)確率接近百分之百凭舶,應(yīng)該是過擬合了嗎哈哈哈哈,我在驗(yàn)證集上的精度也有百分之九十九~
![驗(yàn)證精度](https://i.loli.net/2018/12/24/5c208d539df23.png)