1. 程式人生 > >專案二 CIFAR10與ImageNet影象識別(二)

專案二 CIFAR10與ImageNet影象識別(二)

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