亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 TensorFlow-Keras API 進行數據增強

使用 TensorFlow-Keras API 進行數據增強

躍然一笑 2023-08-22 14:55:47
以下代碼允許訓練集的圖像在每個時期結束時旋轉 90°。from skimage.io import imreadfrom skimage.transform import resize, rotateimport numpy as npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersfrom keras.utils import Sequence from keras.models import Sequentialfrom keras.layers import Conv2D, Activation, Flatten, Dense# Model architecture  (dummy)model = Sequential()model.add(Conv2D(32, (3, 3), input_shape=(15, 15, 4)))model.add(Activation('relu'))model.add(Flatten())modl.add(Dense(1))model.add(Activation('sigmoid'))model.compile(loss='binary_crossentropy',              optimizer='rmsprop',              metrics=['accuracy'])# Data iterator class CIFAR10Sequence(Sequence):    def __init__(self, filenames, labels, batch_size):        self.filenames, self.labels = filenames, labels        self.batch_size = batch_size        self.angles = [0,90,180,270]        self.current_angle_idx = 0    # Method to loop throught the available angles    def change_angle(self):      self.current_angle_idx += 1      if self.current_angle_idx >= len(self.angles):        self.current_angle_idx = 0      def __len__(self):        return int(np.ceil(len(self.filenames) / float(self.batch_size)))    # read, resize and rotate the image and return a batch of images    def __getitem__(self, idx):        angle = self.angles[self.current_angle_idx]        print (f"Rotating Angle: {angle}")        batch_x = self.filenames[idx * self.batch_size:(idx + 1) * self.batch_size]        batch_y = self.labels[idx * self.batch_size:(idx + 1) * self.batch_size]        return np.array([            rotate(resize(imread(filename), (15, 15)), angle)               for filename in batch_x]), np.array(batch_y)如何修改代碼以便在每個紀元期間發生圖像的旋轉?換句話說,我如何編寫一個在紀元“結束”時運行的回調,該回調會更改角度值并繼續在同一紀元上進行訓練(而不更改到下一個紀元)?
查看完整描述

2 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

由于您有一個自定義序列生成器,您可以創建一個在紀元開始或結束時運行的函數。您可以在其中放置代碼來修改圖像。文檔位于[此處。][1]


Epoch-level methods (training only)

on_epoch_begin(self, epoch, logs=None)

Called at the beginning of an epoch during training.


on_epoch_end(self, epoch, logs=None)

Called at the end of an epoch during training.



  [1]: https://keras.io/guides/writing_your_own_callbacks/


查看完整回答
反對 回復 2023-08-22
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

沒有必要CustomCallback為此目的創建一個;最后,您希望在訓練期間進行增強。


解決方案是應用旋轉操作的概率


# read, resize and rotate the image and return a batch of images

def __getitem__(self, idx):

    angle = self.angles[self.current_angle_idx]

    print(f"Rotating Angle: {angle}")

    batch_x = self.filenames[idx * self.batch_size:(idx + 1) * self.batch_size]

    batch_y = self.labels[idx * self.batch_size:(idx + 1) * self.batch_size]

    #These new lines (say we augment with probability > 0.5)

    #Number between 0 and 1

    images = []

    for filename in batch_x:

        probability = random.random()

        apply_rotate = probability > 0.5

        if apply_rotate:

            images.append(rotate(resize(imread(filename), (15, 15)), angle))

        else:

            images.append(resize(imread(filename), (15, 15)))

    return np.array(images), np.array(batch_y)


查看完整回答
反對 回復 2023-08-22
  • 2 回答
  • 0 關注
  • 1634 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號