我尝试使用CNN进行二进制分类。使用与https://www.udemy.com/deeplearning/中所述完全相同的代码来完成。但是,当我在PC(CPU-8 GB RAM)上运行代码时,即使我将批处理大小设为32,训练也非常缓慢地在每个时期执行单个项目。但是,在讲师的计算机(即使他也使用CPU)。 训练集总共包含8000张图像,测试集包含2000张图像。我知道对于这么大的数据,处理肯定会很慢,但是我注意到它比平常要慢得多。
from keras.layers import Dense
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.models import Sequential
classifier=Sequential()
classifier.add(Convolution2D(32, (3, 3 ), input_shape=(64,64,3),activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2 , 2)))
classifier.add(Flatten())
classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dense(units=1, activation='sigmoid'))
classifier.compile(optimizer='adam' , loss='binary_crossentropy' ,metrics=['accuracy'])
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory(
'dataset/training_set',
target_size=(64, 64), #since 64,64,pixels
batch_size=32,
class_mode='binary')
test_set= test_datagen.flow_from_directory(
'dataset/test_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
classifier.fit_generator(
training_set,
steps_per_epoch=8000,
epochs=25,
validation_data=test_set,
validation_steps=2000)
基于目录的图像预处理流程按照Keras文档中的说明进行,以Tensorflow作为后端。
谢谢!
答案 0 :(得分:2)
Dan绝对正确,认为在GPU上运行将挽救生命。但是,我注意到您的“ steps_per_epoch”值为8000,该值等于训练集中的图像数量。这通常应等于图像数量除以批处理大小。在您的情况下,steps_per_epoch应该等于8000/32 = 250。
快速查看示例:https://github.com/brandonschabell/AircraftClassification/blob/new-model-brandon/BrandonsModel.py
答案 1 :(得分:1)
将所有数据放入Google驱动器,并将其装入http://colab.research.google.com。 ...并在GPU上免费运行代码! 处理图像时,CPU并不是最佳选择...
答案 2 :(得分:0)
尽管毫无疑问,GPU将大大提高DNN的推理和训练速度,但通常会忽略通过正确的CPU优化实现的性能提升。 这个问题是关于 CPU缓慢训练 (可能与Keras一起使用)的可能原因。
安装(或编译)正确的TensorFlow二进制文件:
在使用pip install tensorflow
安装TF时,您将获得一个与尽可能多的计算机配置兼容的通用版本,因为pip
(easy_install
,{{1} }等)专注于Python,而忽略了非Python库依赖项,例如virtualenv
,HDF5
,MKL
等。使用英特尔MKL-DNN安装优化的TF构建可能(reference)带来最高“ 70倍的训练性能和最高85倍的推理性能”。在这里阅读如何build your pip-wheel with MKL support。
如果您不想自己打扰从源代码编译TF,请使用LLVM
安装TF二进制文件,该文件可以处理Python包以及Python包本身(例如{ {3}}进行conda
与pip
的一般讨论。另请参阅see here,以直接比较Eigen和MKL优化版本TF的CPU性能。安装MKL优化版本的示例:conda
。
此外,从源代码构建TensorFlow以获得最佳性能。 MKL(-DNN)通常很快速,并且可以在不知道可访问的本机SIMD矢量扩展的情况下部署预构建的二进制文件,但是取决于使用AVX / AVX2 / AVX512扩展的CPU生态系统,它可能会(甚至)更快。 / p>
优化您的输入管道:
conda install tensorflow-mkl
(以及可选的multithreading
)库,它们可能缺乏性能(当执行大量I / O或即时进行扩充时)和可伸缩性(当在多个CPU上运行时) )与this article相比。考虑离线执行增强,或使用其他输入管道(例如TF本机GIL-free implementations或第三方的管道,例如tf.data
)最后,如果您刚开始使用TensorFlow,请不要费心将最后的FLOP挤出系统。一开始并不那么重要。