0x9*_*x90 5 python python-3.x keras tensorflow
我有一个带有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)
Run Code Online (Sandbox Code Playgroud)
请注意,我不能使用multi_gpu_model,因为我的系统只有20个CPU内核。
如何model.fit_generator(xor_data_generator(), steps_per_epoch=batch_size, epochs=10000)同时在不同的核心上分发?
查看 Keras 的Sequence对象来编写自定义生成器。ImageDataGenerator它是产生图像数据的底层对象。这些文档包含您可以调整的样板代码。如果使用它,可以将use_multiprocessing的参数设置fit.generator()为 True。另请参阅此答案。