gpt4 book ai didi

python - 如何检查 Colab 中的预处理时间/速度?

转载 作者:行者123 更新时间:2023-12-04 09:16:21 25 4
gpt4 key购买 nike

我正在 Google Colab GPU 上训练神经网络。因此,我将输入图像(总共 180k,105k 用于训练,76k 用于验证)与我的 Google Drive 同步。然后我安装 Google Drive 并从那里开始。
我在 Google Colab 中加载了一个带有图像路径和标签的 csv 文件,并将其存储为 Pandas 数据帧。
之后,我使用图像路径和标签列表。
我使用这个函数来得到我的标签 onehot-encoded 因为我需要每个标签一个特殊的输出形状 (7, 35) ,这是现有的默认函数无法完成的:

#One Hot Encoding der Labels, Zielarray hat eine Shape von (7,35)
from numpy import argmax
# define input string

def my_onehot_encoded(label):
# define universe of possible input values
characters = '0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ'
# define a mapping of chars to integers
char_to_int = dict((c, i) for i, c in enumerate(characters))
int_to_char = dict((i, c) for i, c in enumerate(characters))
# integer encode input data
integer_encoded = [char_to_int[char] for char in label]
# one hot encode
onehot_encoded = list()
for value in integer_encoded:
character = [0 for _ in range(len(characters))]
character[value] = 1
onehot_encoded.append(character)

return onehot_encoded
之后,我使用自定义的 DataGenerator 将数据批量导入我的模型。 x_set 是我的图像的图像路径列表, y_set 是 onehot 编码的标签:
class DataGenerator(Sequence):

def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size

def __len__(self):
return math.ceil(len(self.x) / self.batch_size)

def __getitem__(self, idx):
batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_x = np.array([resize(imread(file_name), (224, 224)) for file_name in batch_x])
batch_x = batch_x * 1./255
batch_y = self.y[idx*self.batch_size : (idx + 1)*self.batch_size]
batch_y = np.array(batch_y)

return batch_x, batch_y
使用此代码,我将 DataGenerator 应用于我的数据:
training_generator = DataGenerator(X_train, y_train, batch_size=32)
validation_generator = DataGenerator(X_val, y_val, batch_size=32)
当我现在训练我的模型时,一个 epoch 持续 25-40 分钟,这是非常长的。
model.fit_generator(generator=training_generator,
validation_data=validation_generator,
steps_per_epoch = num_train_samples // 16,
validation_steps = num_val_samples // 16,
epochs = 10, workers=6, use_multiprocessing=True)
我现在想知道如何测量预处理时间,因为我不认为这是由于模型大小,因为我已经用较少参数的模型进行了试验,但训练时间并没有显着减少......所以,我很怀疑预处理...

最佳答案

要在 Colab 中测量时间,您可以使用 this autotime包裹:

!pip install ipython-autotime

%load_ext autotime
此外,对于分析,您可以使用 %time如前所述 here .
一般保证generator运行速度更快,建议您从gdrive复制数据到本地主机 colab ,否则会变慢。
如果您正在使用 Tensorflow 2.0 ,原因可能是 this漏洞。
解决方法是:
  • 调用 tf.compat.v1.disable_eager_execution()在代码开头
  • 使用 model.fit而不是 model.fit_generator .前者无论如何都支持生成器。
  • 降级到 TF 1.14

  • 不管 Tensorflow版本,限制您正在执行的磁盘访问量,这通常是一个瓶颈。
    请注意,似乎确实有一个 issue生成器在 TF 中运行缓慢1.13.22.0.1 (至少)。

    关于python - 如何检查 Colab 中的预处理时间/速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63193743/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com