如何防止我的Colab笔记本在图像归一化时崩溃?

我正在尝试创建一个能够识别人类情绪的模型。开始时我的代码和RAM都运行正常:
RAM and DISK
但当我尝试对图像进行归一化时,RAM突然急剧上升
jumped up RAM
然后Colab就崩溃了:
Crash msg 1
Crash msg 2
Crash msg 3

这是导致Colab崩溃的代码块:

import osimport matplotlib.pyplot as pltimport cv2data = []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 # <--- 这是导致Colab崩溃的行        data.append([img, emotions.index(emot)])

如果我移除img /= 255.0,它就不会崩溃,但我的图像就无法归一化了!:Not crashed
我甚至尝试在另一个代码块中进行归一化:

for i in range(len(data)):    data[i][0] = np.array(data[i][0]) / 255.0

但它不起作用,仍然会崩溃


回答:

我想通过一个例子来解释。首先让我们看一下下面的代码。

import numpy as npx = np.random.randint(0, 255, size=(100, 32, 32), dtype=np.int16)print('Present data type', x.dtype)# 你所做的y = x/255print('Present data type', y.dtype)# 你应该做的z = (x/255).astype(np.float16)print('Present data type', z.dtype)

输出:

Present data type int16Present data type float64Present data type float16

如果你仔细看,当我对x变量进行除法并声明y=x/255时,数据类型变为了float64。如果你对NumPy数组的int数据类型进行除法,默认情况下它会被类型转换为float64。通常,’float64’占用的内存更大。因此,在对int类型的NumPy矩阵进行除法时,应该始终将其转换为更短的数据类型,尤其是对于大型数据集。

如果你执行的代码在没有img /= 255.0块的情况下流畅运行,那么这就是原因。在除法之后,你应该将img变量类型转换为最低可能的float类型,比如np.float16np.float32。然而,np.float16有一些限制,并且TensorFlow并不完全支持它(TensorFlow会将其转换为32位浮点数),你可以使用np.float32数据类型。

因此,尝试在img /= 255.0行之后添加img.astype(np.float16)img.astype(np.float32)

修改后的代码如下,

import osimport matplotlib.pyplot as pltimport cv2data = []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) # <--- 这是建议的修改        data.append([img, emotions.index(emot)])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注