我有一个带有20个内核的CPU,我正在尝试使用所有内核来拟合模型。我用tf
设置了intra_op_parallelism_threads=20
会话,并在同一model.fit
会话中调用了tf
。
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)
?
答案 0 :(得分:2)
看看Keras的Sequence
object来编写您的自定义生成器。 ImageDataGenerator
的基础对象是产生图像数据。该文档包含您可以修改的样板代码。如果使用它,可以将use_multiprocessing
的{{1}}参数设置为True。另请参见this答案。