¸üÐÂʱ¼ä:2022Äê08ÔÂ12ÈÕ14ʱ05·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:
´ó¹æÄ£Êý¾Ý¼¯Êdzɹ¦Ó¦ÓÃÉî¶ÈÉñ¾ÍøÂçµÄǰÌá¡£ÀýÈ磬ÎÒÃÇ¿ÉÒÔ¶ÔͼÏñ½øÐв»Í¬·½Ê½µÄ²Ã¼ô£¬Ê¹¸ÐÐËȤµÄÎïÌå³öÏÖÔÚ²»Í¬Î»Ö㬴Ӷø¼õÇáÄ£ÐͶÔÎïÌå³öÏÖλÖõÄÒÀÀµÐÔ¡£ÎÒÃÇÒ²¿ÉÒÔµ÷ÕûÁÁ¶È¡¢É«²ÊµÈÒòËØÀ´½µµÍÄ£ÐͶÔÉ«²ÊµÄÃô¸Ð¶È¡£¿ÉÒÔ˵£¬ÔÚµ±ÄêAlexNetµÄ³É¹¦ÖУ¬Í¼ÏñÔöÇ¿¼¼Êõ¹¦²»¿Éû¡£
³£ÓõÄͼÏñÔöÇ¿·½·¨
ͼÏñÔöÇ¿(image augmentation)ָͨ¹ý¼ôÇС¢Ðýת/·´Éä/·×ª±ä»»¡¢Ëõ·Å±ä»»¡¢Æ½ÒƱ任¡¢³ß¶È±ä»»¡¢¶Ô±È¶È±ä»»¡¢ÔëÉùÈŶ¯¡¢ÑÕÉ«±ä»»µÈÒ»ÖÖ»ò¶àÖÖ×éºÏÊý¾ÝÔöÇ¿±ä»»µÄ·½Ê½À´Ôö¼ÓÊý¾Ý¼¯µÄ´óС¡£Í¼ÏñÔöÇ¿µÄÒâÒåÊÇͨ¹ý¶ÔѵÁ·Í¼Ïñ×öһϵÁÐËæ»ú¸Ä±ä£¬À´²úÉúÏàËÆµ«ÓÖ²»Í¬µÄѵÁ·Ñù±¾£¬´Ó¶øÀ©´óѵÁ·Êý¾Ý¼¯µÄ¹æÄ££¬¶øÇÒËæ»ú¸Ä±äѵÁ·Ñù±¾¿ÉÒÔ½µµÍÄ£ÐͶÔijЩÊôÐÔµÄÒÀÀµ£¬´Ó¶øÌá¸ßÄ£Ð͵ķº»¯ÄÜÁ¦¡£
³£¼ûµÄͼÏñÔöÇ¿·½Ê½¿ÉÒÔ·ÖΪÁ½Àࣺ¼¸ºÎ±ä»»ÀàºÍÑÕÉ«±ä»»Àà
¼¸ºÎ±ä»»À࣬Ö÷ÒªÊǶÔͼÏñ½øÐм¸ºÎ±ä»»²Ù×÷£¬°üÀ¨·×ª£¬Ðýת£¬²Ã¼ô£¬±äÐΣ¬Ëõ·ÅµÈ¡£

ÑÕÉ«±ä»»Àָ࣬ͨ¹ýÄ£ºý¡¢ÑÕÉ«±ä»»¡¢²Á³ý¡¢Ìî³äµÈ·½Ê½¶ÔͼÏñ½øÐд¦Àí¡£

ʵÏÖͼÏñÔöÇ¿¿ÉÒÔͨ¹ýtf.imageÀ´Íê³É£¬Ò²¿ÉÒÔͨ¹ýtf.keras.imageGeneratorÀ´Íê³É¡£
tf.image½øÐÐͼÏñÔöÇ¿
µ¼ÈëËùÐèµÄ¹¤¾ß°ü²¢¶ÁȡҪ´¦ÀíµÄͼÏñ£º
# µ¼È빤¾ß°ü
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# ¶ÁȡͼÏñ²¢ÏÔʾ
cat = plt.imread('./cat.jpg')
plt.imshow(cat)
·×ªºÍ²Ã¼ô
×óÓҷתͼÏñÊÇ×îÔçÒ²ÊÇ×î¹ã·ºÊ¹ÓõÄÒ»ÖÖͼÏñÔö¹ã·½·¨¡£¿ÉÒÔͨ¹ýtf.image.random_flip_left_rightÀ´ÊµÏÖͼÏñ×óÓҷת¡£
# ×óÓҷת²¢ÏÔʾ cat1 = tf.image.random_flip_left_right(cat)plt.imshow(cat1£©

´´½¨tf.image.random_flip_up_downʵÀýÀ´ÊµÏÖͼÏñµÄÉÏÏ·ת£¬ÉÏÏ·תʹÓõĽÏÉÙ¡£
# ÉÏÏ·ת cat2 = tf.image.random_flip_up_down(cat)plt.imshow(cat2)

Ëæ»ú²Ã¼ô³öÒ»¿éÃæ»ýΪÔÃæ»ý10%∼100%10%∼100%µÄÇøÓò£¬ÇÒ¸ÃÇøÓòµÄ¿íºÍ¸ßÖ®±ÈËæ»úÈ¡×Ô0.5∼20.5∼2£¬È»ºóÔÙ½«¸ÃÇøÓòµÄ¿íºÍ¸ß·Ö±ðËõ·Åµ½200ÏñËØ¡£
# Ëæ»ú²Ã¼ô cat3 = tf.image.random_crop(cat,(200,200,3)) plt.imshow(cat3)

ÑÕÉ«±ä»»
ÁíÒ»ÀàÔö¹ã·½·¨ÊÇÑÕÉ«±ä»»¡£ÎÒÃÇ¿ÉÒÔ´Ó4¸ö·½Ãæ¸Ä±äͼÏñµÄÑÕÉ«£ºÁÁ¶È¡¢¶Ô±È¶È¡¢±¥ºÍ¶ÈºÍÉ«µ÷¡£½ÓÏÂÀ´½«Í¼ÏñµÄÁÁ¶ÈËæ»ú±ä»¯ÎªÔͼÁÁ¶ÈµÄ50%50%(¼´1−0.51−0.5)∼150%∼150%(¼´1+0.51+0.5)¡£
cat4=tf.image.random_brightness(cat,0.5) plt.imshow(cat4)

ÀàËÆµØ£¬ÎÒÃÇÒ²¿ÉÒÔËæ»ú±ä»¯Í¼ÏñµÄÉ«µ÷:
cat5 = tf.image.random_hue(cat,0.5) plt.imshow(cat5)

ʹÓÃImageDataGenerator()½øÐÐͼÏñÔöÇ¿
ImageDataGenerator()ÊÇkeras.preprocessing.imageÄ£¿éÖеÄͼƬÉú³ÉÆ÷£¬¿ÉÒÔÔÚbatchÖжÔÊý¾Ý½øÐÐÔöÇ¿£¬À©³äÊý¾Ý¼¯´óС£¬ÔöǿģÐ͵ķº»¯ÄÜÁ¦¡£±ÈÈçÐýת£¬±äÐεȣ¬ÈçÏÂËùʾ£º
keras.preprocessing.image.ImageDataGenerator(
rotation_range=0, #ÕûÊý¡£Ëæ»úÐýתµÄ¶ÈÊý·¶Î§¡£
width_shift_range=0.0, #¸¡µãÊý¡¢¿í¶ÈÆ½ÒÆ
height_shift_range=0.0, #¸¡µãÊý¡¢¸ß¶ÈÆ½ÒÆ
brightness_range=None, # ÁÁ¶Èµ÷Õû
shear_range=0.0, # ²Ã¼ô
zoom_range=0.0, #¸¡µãÊý »ò [lower, upper]¡£Ëæ»úËõ·Å·¶Î§
horizontal_flip=False, # ×óÓҷת
vertical_flip=False, # ´¹Ö±·×ª
rescale=None # ³ß¶Èµ÷Õû
)
À´¿´ÏÂˮƽ·×ªµÄ½á¹û£º
# »ñÈ¡Êý¾Ý¼¯
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# ½«Êý¾Ýת»»Îª4άµÄÐÎʽ
x_train = X_train.reshape(X_train.shape[0],28,28,1)
x_test = X_test.reshape(X_test.shape[0],28,28,1)
# ÉèÖÃͼÏñÔöÇ¿·½Ê½£ºË®Æ½·×ª
datagen = ImageDataGenerator(horizontal_flip=True)
# ²é¿´ÔöÇ¿ºóµÄ½á¹û
for X_batch,y_batch in datagen.flow(x_train,y_train,batch_size=9):
plt.figure(figsize=(8,8)) # É趨ÿ¸öͼÏñÏÔʾµÄ´óС
# ²úÉúÒ»¸ö3*3Íø¸ñµÄͼÏñ
for i in range(0,9):
plt.subplot(330+1+i)
plt.title(y_batch[i])
plt.axis('off')
plt.imshow(X_batch[i].reshape(28,28),cmap='gray')
plt.show()
break
±±¾©Ð£Çø