專案二 CIFAR10與ImageNet影象識別(二)
阿新 • • 發佈:2018-12-19
2.使用tensorflow訓練CIFAR10識別模型
2.1資料增強
通過平移、旋轉、翻轉、裁剪、縮放、顏色變換等資料操作可以增加資料庫的數量,同時也能大大提高模型的泛化能力,並且可以預防過擬合。在應用這個方法的時候,我們可以使用以下方法:
# 隨機剪裁 distorted_image = tf.random_crop(reshaped_image, [height, width, 3]) # 隨機翻轉,50%水平翻轉 distorted_image = tf.image.random_flip_left_right(distorted_image) # 隨機改變亮度對比度 distorted_image = tf.image.random_brightness(distorted_image, max_delta=63) distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)
2.2CIFAR識別模型構建
這一步,就在建立用於識別的神經網路,tensorflow給出的程式碼很好,沒有什麼可以修改的地方。原理即是兩次的卷積網路加兩次全連線轉到softmax.
2.3一些小知識點
1.tf.gfile.Exists(FLAGS.train_dir)是用來確定train_dir是否存在的命令
2.tf.contrib.framework.get_or_create_global_step()用來生成系統執行步數(tensor結構)
3.epoch是所有樣本的數量,batch是訓練一個step中所要用的樣本的數量,而batch_size*global_step=epoch
例如batch_size=16,epoch為1024,則經過64個step就完成一個epoch,則打亂epoch進行第二個epoch
4.對於這一部分:
with tf.control_dependencies([loss_averages_op]): opt = tf.train.GradientDescentOptimizer(lr) grads = opt.compute_gradients(total_loss) # Apply gradients. apply_gradient_op = opt.apply_gradients(grads, global_step=global_step)
則是要自己處理一下計算完成的梯度,並之後賦值給variable