win10专业版使用docker搭建tensorflow+ker
老大有令,让我们安装下 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 drivesdocker-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 镜像,等待导入完成后,写个栗子运行下。
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 文件夹。
jupyterkeras:
import keras
在 pycharm 里第一句就是红的,跑到容器内运行下 python
和 import 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 到此结束,接下来等待老大进一步命令。