大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

win10专业版使用docker搭建tensorflow+keras

老大有令,让我们安装下 tensorflow 和 keras,然后闲暇时研究一下神经网络。
刚好最近在折腾 docker,公司电脑用的win10,而且还没有docker环境,所以这次顺便折腾下 windows 版的 docker。

系统环境

win10 家庭版没有 heyper-v,可以搜下专业版的激活密钥,重新激活后就成了专业版。

然后在 控制面板 -> 程序 -> 启用或关闭 Windows 功能 -> 勾选 heyper-v,然后重启。

重启后下载安装 docker 。
[ 点我下载 ]


编写 dockerfile

从 tensorflow 镜像中安装 keras,jupyter 和 tensorflow 在镜像中已经安装过了,我们只需要把 keras 安装即可。


FROM tensorflow/tensorflow
#FROM tensorflow/tensorflow:tag-py3 python3版本

RUN apt-get update -y

RUN pip --no-cache-dir install keras


docker-compose.yml

windows 挂载目录是比较坑的,需要通过 /c/www/python/notebooks 这样的绝对路径挂载。

如果这样写还报错,在下图的设置勾掉,然后再勾上。

shared drives

docker-compose.yml 内容:


version: '3.7'
services:
  python:
    build: .
    volumes:
      - /c/www/python/notebooks:/notebooks:rw
      - /c/www/python/tmp:/tmp:rw
    ports:
      - "8888:8888"
      - "6006:6006"


pycharm 连接 python 容器

开发工具是 win10 系统内安装的 pycham 2018.3,在 docker -> setting -> general -> 勾选最后一项 expose deamon on tcp://localhost:2375 without TLS 打开守护程序。

这个不开 pycharm 是无法连接 docker 的。

docker-server

按照图上的位置,在 pycharm 中添加 docker,接下来还需要引入 python 的解析器。

setting -> project python -> project interpreter 中添加一个 docker,然后选择 python 镜像,等待导入完成后,写个栗子运行下。

select python

print('hello world! I am python from docker.')

e36ec1af4f5a:python -u /opt/project/hello-world.py
hello world! I am python from docker.

Process finished with exit code 0

右键运行,可以看到控制台的输出。

如果遇到下边的报错,重启下 docker 。

14:28 Error running 'hello-world'
Can't run remote python interpreter: com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"error while creating mount source path '/host_mnt/c/www/python': mkdir /host_mnt/c: file exists"}

测试

tensorflow:


import tensorflow as tf

hello = tf.constant('Hello TendorFlow!')
sess = tf.Session()
print(sess.run(hello))

右键运行,虽然输出了,但是也收获了警告一枚:

38266a5dfbb2:python -u /opt/project/hello-world.py
2018-12-27 06:36:56.711577: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Hello TendorFlow!

Process finished with exit code 0

意思是我下载的版本不支持 cpu 的 AVX2 ,查了下资料,只是警告说如果从源代码构建 TensorFlow,它可以在机器上跑的更快。

在我这个连显卡都没有的开发机上,我也不指望它能跑多快啊 Σ( ° △ °|||)︴

算了,我选择无视这个问题。

测试也可以通过 jupyter 新建运行,保存后文件就放在上边挂载的 notebooks 文件夹。

jupyter

keras:


import keras

在 pycharm 里第一句就是红的,跑到容器内运行下 pythonimport keras 也是可以的,只有外边的引用出了问题。

打开配置看看,里边果然有好几个环境,我之前选的 tensorflow 的,那么换一个试试:


切换配置

更新完成后,复制下边的栗子进去再次运行,虽然代码提示还是红的,但是已经能够成功运行了:


import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)


贴进 jupyter 运行,一样完美。


jupyter

结尾

tensorflow 和 keras 到此结束,接下来等待老大进一步命令。