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

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

如何讓數據生成器更有效率?

如何讓數據生成器更有效率?

墨色風雨 2022-12-14 17:38:07
為了訓練神經網絡,我修改了在 YouTube 上找到的一段代碼。它看起來如下:def data_generator(samples, batch_size, shuffle_data = True, resize=224):  num_samples = len(samples)  while True:    random.shuffle(samples)    for offset in range(0, num_samples, batch_size):      batch_samples = samples[offset: offset + batch_size]      X_train = []      y_train = []      for batch_sample in batch_samples:        img_name = batch_sample[0]        label = batch_sample[1]        img = cv2.imread(os.path.join(root_dir, img_name))        #img, label = preprocessing(img, label, new_height=224, new_width=224, num_classes=37)        img = preprocessing(img, new_height=224, new_width=224)        label = my_onehot_encoded(label)        X_train.append(img)        y_train.append(label)      X_train = np.array(X_train)      y_train = np.array(y_train)      yield X_train, y_train現在,我嘗試使用此代碼訓練神經網絡,訓練樣本大小為 105.000(圖像文件包含 37 種可能性中的 8 個字符、AZ、0-9 和空格)。我使用了相對較小的批次大?。?2,我認為這已經太小了)來提高效率,但是訓練第一個時期的四分之一卻花了很長時間(我每個時期有 826 步,花了 90 分鐘199 步... steps_per_epoch = num_train_samples // batch_size)。數據生成器中包含以下功能:def shuffle_data(data):  data=random.shuffle(data)  return data我不認為我們可以使這個函數更有效或將它從生成器中排除。def preprocessing(img, new_height, new_width):  img = cv2.resize(img,(new_height, new_width))  img = img/255  return img為了預處理/調整數據大小,我使用此代碼將圖像設置為唯一大小,例如 (224, 224, 3)。我認為,生成器的這一部分花費的時間最多,但我看不到將其從生成器中排除的可能性(因為如果我們在批次之外調整圖像的大小,我的內存將滿)。#One Hot Encoding of the Labelsfrom numpy import argmax# define input string我認為,在這一部分中,可能有一種方法可以提高效率。我正在考慮從生成器中排除此代碼并在生成器外部生成數組 y_train,這樣生成器就不必每次都對標簽進行熱編碼。你怎么看?還是我應該采用完全不同的方法?
查看完整描述

1 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

我發現你的問題非常有趣,因為你只提供了線索。所以這是我的調查。

使用您的代碼片段,我在 YouTube 上找到了GitHub 存儲庫和 3 部分視頻教程,主要關注在 Python 中使用生成器函數的好處。數據基于這個 kaggle(我建議檢查該問題的不同內核,以將您已經嘗試過的方法與另一個 CNN 網絡進行比較,并查看正在使用的 API)。

您不需要從頭開始編寫數據生成器,雖然這并不難,但是發明輪子效率不高。

盡管如此,為了解決 kaggle 的任務,該模型只需要感知單個圖像,因此該模型是一個簡單的深度 CNN。但據我了解,您將 8 個隨機字符(類別)組合到一張圖像中以一次識別多個類別。對于該任務,您需要 R-CNN 或 YOLO 作為模型。我最近剛剛為自己打開了YOLO v4,可以讓它非??焖俚赜糜谔囟ㄈ蝿?。

關于您的設計和代碼的一般建議。

  • 確保庫使用 GPU。它節省了很多時間。(盡管我在 CPU 上非??斓刂貜土舜鎯熘械幕▽嶒灐蠹s 10 分鐘,但結果預測并不比隨機猜測好多少。所以完整的訓練需要大量的 CPU 時間。)

  • 比較不同的版本以找到瓶頸。嘗試包含 48 張圖像(每個類 1 張)的數據集,增加每個類的圖像數量,然后進行比較??s小圖像尺寸,改變模型結構等。

  • 在小的人工數據上測試全新模型以證明想法或使用迭代過程,從可以轉換為您的任務(手寫識別?)的項目開始。


查看完整回答
反對 回復 2022-12-14
  • 1 回答
  • 0 關注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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