tensorflow keras不使用所有可用资源

时间:2017-10-16 13:01:55

标签: python tensorflow keras

我在深度学习方面相当新,为了提高我的知识,我一直在阅读一些书籍并在线观看视频课程。 在这个视频中,我必须使用卷积neaural网络进行练习。 我已经建立了一个拥有10,000张图像的CNN,尺寸为64x64像素。 (识别猫狗图像)

from keras.models import Sequential
from  keras.layers import Convolution2D
from  keras.layers import MaxPooling2D
from  keras.layers import Flatten
from  keras.layers import Dense

# Initialising the CNN

classifier = Sequential()

# Step 1 - Convolution
classifier.add(Convolution2D(32,3,3,input_shape=(64,64,3),activation='relu'))

# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2,2)))


classifier.add(Convolution2D(32,3,3,activation='relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))

# Step 3 - Flattening
classifier.add(Flatten())

#step 4 - Full Connection CNN
classifier.add(Dense(output_dim = 128 ,activation='relu'))
classifier.add(Dense(output_dim = 1 ,activation='sigmoid'))

# Compiling the CNN

classifier.compile(optimizer = 'adam' , loss = 'binary_crossentropy', metrics = ['accuracy'])

# Fitting the CNN to the images
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)

traininig_set = train_datagen.flow_from_directory(
        'dataset/training_set',
        target_size=(64, 64),
        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(traininig_set,
        steps_per_epoch=8000,
        epochs=25,
        validation_data=test_set,
        validation_steps=2000)

我第一次安装Anaconda时,我没有安装GPU模块,当我开始安装我的CNN时 我不得不等待每个纪元1190秒,CPU工作在70%。 为了您的信息,我的电脑很快。它是i7 6800k超频到4.2ghz的MSI GTX1080显卡和32gb 3333Mhz。 我已经考虑过用这台电脑安装tensorflow gpu模块几乎是强制性的。

我在一些posts中观察了如何检查张量流是否正确配置为使用GPU 并启动:

In [1]: from tensorflow.python.client import device_lib
In [2]: print(device_lib.list_local_devices())

我有这个结果:

2017-10-16 10:41:25.780983: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-10-16 10:41:25.781067: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-10-16 10:41:26.635590: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:955] Found device 0 with properties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.8225
pciBusID 0000:03:00.0
Total memory: 8.00GiB
Free memory: 6.61GiB
2017-10-16 10:41:26.635807: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:976] DMA: 0
2017-10-16 10:41:26.636324: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:986] 0:   Y
2017-10-16 10:41:26.637179: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1045] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:03:00.0)
[name: "/cpu:0"
device_type: "CPU"
memory_limit: 268435456

locality {
}
incarnation: 16495731140373557390
, name: "/gpu:0"
device_type: "GPU"
memory_limit: 6740156088

locality {
  bus_id: 1
}
incarnation: 6266244792178813148
physical_device_desc: "device: 0, name: GeForce GTX 1080, pci bus id: 0000:03:00.0"
]

使用gpu:0,我在文档中读到TensorFlow会自动使用GPU进行计算。

使用此配置启动fit方法我必须每个时期等待950秒,远远好于1190秒。 cpu永远不会超过10%,奇怪的是,GPU永远不会超过10-13%。 我认为我的配置有问题,因为课程中的老师使用MacBook笔记本(我实际上并不知道确切的配置)没有tensorflow GPU模块,每个纪元大约需要90秒。

我不是python或tensorflow专家,但它似乎确实存在错误或其他需要理解的东西。

有人可以给出一些建议,有些东西需要阅读,有些测试可以更好地了解瓶颈在哪里? 谢谢

2 个答案:

答案 0 :(得分:1)

我在Windows上没有GPU,但是我在Anaconda上安装了英特尔的Python发行版非常好:https://software.intel.com/en-us/articles/using-intel-distribution-for-python-with-anaconda

对于tensorflow,最好的似乎是python 3.5环境(在上一个链接中,使用python=3.5

然后我在使用anaconda制作的环境中安装了pip的tensorflow。关注installing with anaconda

然后Keras与conda install keras。 (但要确保它不会取代以前的numpy和其他安装,找到正确的安装命令而不是替换这些最佳的软件包)。如果conda版本不起作用,也许pip install keras会更好。 (再次,使用适当的选项不要替换现有的包) - 不要让这个keras安装替换你的numpy包或tensorflow包!

这给了我所有处理器绝对100%(根据Windows资源监视器)

如果这不能解决您的问题,您还可以尝试从here获取numpy和scipy包。不幸的是,我没有使用来自此源的keras和tensorflow包,但是numpy是高质量的东西。

使用GPU,您的问题可能是缺少合适的CUDA驱动程序和CUDNN库? 关注thisthis

不幸的是,这些事情在计算机之间变化很大。我严格遵循这些站点中的说明,并在tensorflow站点中,对于linux机器,结果令人惊讶。

答案 1 :(得分:0)

除了丹尼尔的答案(查看CUDA和cuDNN)之外,从不一个好主意是同时安装tensorflowtensorflow-gpu个软件包;最有可能的是,您正在使用tensorflow(即CPU)。

为避免这种情况,您应卸载两个软件包,然后重新安装tensorflow-gpu,即:

pip uninstall tensorflow tensorflow-gpu
pip install tensorflow-gpu

在类似问题上另见[(3)}。