我正在谷歌Colab GPU上训练神经网络。因此,我将输入图像(总共180k,105k用于培训,76k用于验证)与我的Google Drive同步。然后我装上谷歌硬盘,从那里开始。 我在GoogleColab中加载一个带有图像路径和标签的csv文件,并将其存储为数据帧。 之后,我使用图像路径和标签列表
我使用此函数对标签进行onehot编码,因为每个标签需要一个特殊的输出形状(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
是一个热编码标签:
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)
当我现在训练我的模型时,一个纪元持续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
包:此外,对于评测,您可以使用前面提到的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.2
和2.0.1
(至少)。相关问题 更多 >
编程相关推荐