我有一个 20 核的 CPU,我正在尝试使用所有核来拟合模型。我设置了 tf
与 intra_op_parallelism_threads=20
的 session 并调用model.fit
在同一tf
session 。
python 进程利用 2000%
CPU(如 top
所述)。但是,当将以下代码与单核配置 (intra_op_parallelism_threads=1
) 进行比较时,我得到了相同的学习率。
from keras.layers import Dense, Activation, Dropout
from keras.layers import Input, Conv1D
import numpy as np
from keras.layers.merge import concatenate
from keras.models import Model
import tensorflow as tf
from keras.backend import tensorflow_backend as K
with tf.Session(config=tf.ConfigProto(intra_op_parallelism_threads=20)) as sess:
K.set_session(sess)
size=20
batch_size=16
def xor_data_generator():
while True:
data1 = np.random.choice([0, 1], size=(batch_size, size,size))
data2 = np.random.choice([0, 1], size=(batch_size, size,size))
labels = np.bitwise_xor(data1, data2)
yield ([data1, data2], np.array(labels))
a = Input(shape=(size,size))
b = Input(shape=(size,size))
merged = concatenate([a, b])
hidden = Dense(2*size)(merged)
conv1 = Conv1D(filters=size*16, kernel_size=1, activation='relu')(hidden)
hidden = Dropout(0.1)(conv1)
outputs = Dense(size, activation='sigmoid')(hidden)
model = Model(inputs=[a, b], outputs=outputs)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit_generator(xor_data_generator(), steps_per_epoch=batch_size, epochs=10000)
请注意,我不能使用 multi_gpu_model ,因为我的系统只有 20 个 CPU 内核。
如何分发 model.fit_generator(xor_data_generator(), steps_per_epoch=batch_size, epochs=10000)
同时在不同的内核上?
最佳答案
看看 Keras 的 Sequence
object编写您的自定义生成器。它是生成图像数据的 ImageDataGenerator
的基础对象。文档包含您可以修改的样板代码。如果你使用它,你可以将 fit.generator()
的 use_multiprocessing
参数设置为 True。另见 this回答。
关于python - 拟合模型时如何在keras/tensorflow中使用多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180645/