[英]How can I stop my Colab notebook from crashing while normalising my images?
我正在嘗試制作一個能夠識別人類情緒的 model。 我的代碼和 RAM 一開始就很好:
但是當我嘗試標准化我的圖像時,RAM 會急劇上升
然后 Colab 就崩潰了:
這是導致 colab 崩潰的代碼塊:
import os
import matplotlib.pyplot as plt
import cv2
data = []
for emot in os.listdir('./data/'):
for file_ in os.listdir(f'./data/{emot}'):
img = cv2.imread(f'./data/{emot}/{file_}', 0)
img = cv2.bitwise_not(img)
img /= 255.0 # <--- This is the line that causes colab to crash
data.append([img, emotions.index(emot)])
如果我刪除img /= 255.0
,它不會崩潰,但是我有未標准化的圖像::
我什至嘗試在另一個塊中對其進行規范化:
for i in range(len(data)):
data[i][0] = np.array(data[i][0]) / 255.0
但它不起作用,仍然崩潰
我想通過一個例子來go。 首先讓我們看一下下面的代碼。
import numpy as np
x = np.random.randint(0, 255, size=(100, 32, 32), dtype=np.int16)
print('Present data type', x.dtype)
# What you did
y = x/255
print('Present data type', y.dtype)
# What you should do
z = (x/255).astype(np.float16)
print('Present data type', z.dtype)
Output:
Present data type int16
Present data type float64
Present data type float16
如果您仔細觀察,當我划分x
變量並聲明y=x/255
時,數據類型將更改為float64
。 如果您划分 NumPy 數組的int
數據類型,默認情況下將其類型轉換為float64
。 通常,“float64”包含較大的 memory。 因此,在划分一個int
類型的 NumPy 矩陣時,對於較大的數據集,應該始終將類型轉換為較短的數據類型。
如果您執行的代碼在沒有img /= 255.0
塊的情況下流暢運行,那么就是這種情況。 除法后,您應該將img
變量類型轉換為可能的最低float
類型,例如np.float16
或np.float32
。 但是, np.float16
有一些限制,TensorFlow 不完全支持它(TF 將其轉換為 32 位浮點數),您可以使用np.float32
數據類型。
因此,請嘗試在img /= 255.0
行之后添加img.astype(np.float16)
或img.astype(np.float32)
。
給出了修改后的代碼版本,
import os
import matplotlib.pyplot as plt
import cv2
data = []
for emot in os.listdir('./data/'):
for file_ in os.listdir(f'./data/{emot}'):
img = cv2.imread(f'./data/{emot}/{file_}', 0)
img = cv2.bitwise_not(img)
img = (img/255.0).astype(np.float16) # <--- This is the suggestion
data.append([img, emotions.index(emot)])
假設管道中的下一步是從圖像語料庫中創建tf.data.Dataset
object,您可以使用Dataset.map()
將預處理移至數據加載管道以節省 memory 空間。 Tensorflow
有一個非常詳細的指南,說明如何在此處執行此操作-> https://www.tensorflow.org/guide/data#preprocessing_data
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.