gpt4 book ai didi

python - Keras 打印无输出,高内存和 CPU 使用率,使用 tensorboard 回调时不使用 GPU

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:01 25 4
gpt4 key购买 nike

我在 Keras 遇到了一个奇怪的情况,这真的把我吓坏了。我正在尝试使用带有额外卷积、全局平均池和密集层的预训练 Inception 来训练 CNN。我正在使用 ImageDataGenerator 加载数据。

数据生成器工作正常,我已经测试过了。该模型也编译得很好。但是当我运行 fit_generator 时,没有打印输出,CPU 处于 100% 并且内存开始缓慢填充直到溢出。尽管我有一个 GPU 并在 tensorflow(这里是后端)中使用它多次,但它完全被 Keras 忽略了。

考虑到批量大小可能是个问题,我将其设置为 1,但并没有解决问题。图片大小为299x299,反正也不算大。

我将发布下面的代码作为引用,尽管在我看来它没有任何问题:

def get_datagen():
return ImageDataGenerator(rotation_range=30,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)

# Setup and compile the model.
model = InceptionV3(include_top=False, input_shape=(None, None, 3))

# Set the model layers to be untrainable
for layer in model.layers:
layer.trainable = False

x = model.output
x = Conv2D(120, 5, activation='relu')(x)
x = GlobalAveragePooling2D()(x)
predictions = Activation('softmax')(x)

model_final = Model(inputs=model.inputs, outputs=predictions)

model_final.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy'])

# Define the dataflow.
train_gen = get_datagen()
val_test_gen = get_datagen()

train_data = train_gen.flow_from_directory(train_folder, target_size=(299, 299), batch_size=1)
val_data = val_test_gen.flow_from_directory(validation_folder, target_size=(299, 299), batch_size=1)
test_data = val_test_gen.flow_from_directory(test_folder, target_size=(299, 299), batch_size=1)

train_size = train_data.n
val_size = val_data.n
test_size = test_data.n

# Define callbacks.
model_checkpoint = ModelCheckpoint('../models/dbc1/', monitor='val_accuracy', verbose=1, save_best_only=True)
early_stopping = EarlyStopping(monitor='val_accuracy', patience=3, verbose=1, mode='max')
tensorboard = TensorBoard(log_dir='../log/dbc1', histogram_freq=1, write_grads=True, )


model_final.fit_generator(train_data, steps_per_epoch=1, epochs=100,
callbacks=[model_checkpoint, early_stopping, tensorboard],
validation_data=val_data, verbose=1)

编辑

似乎张量板回调是这里的问题。当我删除它时,一切正常。有谁知道为什么会这样?

最佳答案

在某些条件下使用 histogram_freq=1 时似乎有问题(可能与 keras#3358 相关)。

您可以尝试设置 histogram_freq=0 并在 keras 存储库中提交问题。你不会有梯度直方图,但至少你可以训练:

model.fit(...,
callbacks=[
TensorBoard(log_dir='./logs/', batch_size=batch_size),
...
])

我注意到并非所有经过训练的模型都会出现此问题。如果 InceptionV3 的使用不是必需的,我建议您切换到另一个模型。到目前为止,我发现以下代码(改编自您的代码,使用VGG19)适用于keras==2.1.2tensorflow==1.4.1:

from keras.applications import VGG19
from keras.applications.vgg19 import preprocess_input

input_shape = (224, 224, 3)
batch_size = 1

model = VGG19(include_top=False, input_shape=input_shape)
for layer in model.layers:
layer.trainable = False

x, y = model.input, model.output
y = Conv2D(2, 5, activation='relu')(y)
y = GlobalAveragePooling2D()(y)
y = Activation('softmax')(y)

model = Model(inputs=model.inputs, outputs=y)
model.compile('adam',
loss='categorical_crossentropy',
metrics=['accuracy'])

g = ImageDataGenerator(rotation_range=30,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
preprocessing_function=preprocess_input)

train_data = g.flow_from_directory(train_folder,
target_size=input_shape[:2],
batch_size=batch_size)
val_data = g.flow_from_directory(validation_folder,
target_size=input_shape[:2],
batch_size=batch_size)
test_data = g.flow_from_directory(test_folder,
target_size=input_shape[:2],
batch_size=batch_size)

model.fit_generator(train_data, steps_per_epoch=1, epochs=100,
validation_data=val_data, verbose=1,
callbacks=[
ModelCheckpoint('./ckpt.hdf5',
monitor='val_accuracy',
verbose=1,
save_best_only=True),
EarlyStopping(patience=3, verbose=1),
TensorBoard(log_dir='./logs/',
batch_size=batch_size,
histogram_freq=1,
write_grads=True)])

关于python - Keras 打印无输出,高内存和 CPU 使用率,使用 tensorboard 回调时不使用 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47981775/

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