1. 程式人生 > >Tensorflow學習筆記(一)環境配置

Tensorflow學習筆記(一)環境配置

目標:完成tensorflow的環境配置
寫在前面:第一次構建神經網路,本來想用Tensorflow的……但是Windows上使用Tensorflow需要用Docker,然後在使用過程中掛載磁碟一直報錯(mount:permission denied)……
使用Docker安裝Tensorflow的教程我使用的是在Windows上玩TensorFlow(一)——安裝Docker
因為在國內下載tensorflow一直有問題,所以我在這個部落格找了打包好的檔案,然後匯入就可以了。

資料集

使用的資料集是MNIST的資料集,也是Tensorflow的入門教程裡提到的,下載地址在THE MNIST DATABASE of handwritten digits


注意:
1.資料集中的圖片格式不是常見的格式,需要自己編寫程式讀取;
2.資料集的資料如果是以包圍盒中心而不是以聚集中心進行分類的話,會提高錯誤率;
3.SD-3的資料來自工作人員,SD-1的資料來自高中生,SD-3的資料會更乾淨一些,所以SD-3的資料更容易識別,但是實驗需要把這些資料混合(下載的資料已經將這些都弄好了)

Docker

因為是windows系統……很多軟體只能在Linux的平臺上用,然而裝個Linux什麼的又實在虐心,所以Docker就是一個很好的選擇。

什麼是Docker

Docker的核心是LXC,Linux Container 容器,是一個輕量級的虛擬化技術。它的概念與虛擬機器差不多,就是將各種程式打包放在合適的平臺上執行,但是不同點是:它不包含作業系統核心


普通的虛擬機器:將需要執行的程式放在完整的作業系統中,虛擬作業系統執行在虛硬體平臺上
Docker:是LXC的一種高階封裝,Docker的操作下,容器直接執行在宿主作業系統上,每個容器之間互不干擾。

Docker引擎

Docker的引擎分為三個部分,從底至上分別是:
1.Server:Docker的Server是一個一直執行的虛擬程序,可以實現容器、映象的建立和管理。
2.REST API:與虛擬程序的通訊介面
3.Commend Line Interface: 命令列介面,互動入口

Docker架構

Docker是CS架構,使用者通過客戶端來操作核心。
Docker Image:【構成元件】Docker映象是一個只讀的模版,所以同一個Docker的Ubuntu系統可以用來建立多個容器,而所有的容器中的操作都不會影響這個映象。要實現這一點,就需要將使用者的所有操作都控制在同一層,這一層就叫做Docker Container


Docker Container:【執行元件】這個就像一個資料夾,包含了所有專案需要的檔案,各個Container之間互不影響。
Docker Registries:【分佈元件】用來儲存各種映象檔案,網上有各種Docker映象,可以下載。

Docker 執行

一個容器包含了作業系統、使用者檔案、元資料。每次建立一個容器就會在只讀映象上建立一個讀寫層。

$ docker run -i -t ubuntu /bin/bash

執行一個Docker容器,Docker引擎會……
1.檢查映象,如ubuntu,如果存在,就根據這個映象建立一個容器
2.建立檔案系統和一個讀寫層
3.分配網路/橋介面
4.找一個IP
5.執行程式
6.輸出執行結果

Docker Engine & Docker Machine

一般大家說Docker 都是指Docker Engine,然而!我安裝的其實是Docker Machine!
在Linux系統上,直接用Docker Engine就可以了,如果要同時控制多個Docker 主機,或者分散式架構的話,就需要Docker Machine了。
Docker Machine的命令都是docker-machine 開頭的,Docker Engine的命令是docker開頭的。

使用Docker Machine

根據上一篇部落格內容,建立的ron-docker 的docker machine之後,安裝好了tensorflow。
1. 啟動ron-machine
2. 輸入 docker-machine env ron-docker

Init...
ron-docker is shutdown.
Starting "ron-docker"...
(ron-docker) Check network to re-create if needed...
(ron-docker) Waiting for an IP...
Machine "ron-docker" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
Configuring Environment...
Init Finished.
[email protected]:/# docker-machine env ron-docker
bash: docker-machine: command not found//已經進入ron-docker 所以不能使用docker-machine的命令了
[email protected]:/# uname -a //檢視ron-docker的資訊
Linux ca56af647b49 4.4.17-boot2docker #1 SMP Mon Aug 15 17:12:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  1. 埠轉發
    在VirtualBox完成了埠轉發(8080)之後,
    docker run -it -p 8080:8080 b.gcr.io/tensorflow/tensorflow
    然後在cmd中docker-machine ip ron-docker檢視ron-docker的ip 192.168.99.100
    http://192.168.99.100:8080/ 進入這個頁面卻發現“拒絕連線請求”ERR_CONNECTION_REFUSED
    然後發現是因為容器裡沒有執行 run_jupyter.sh 檔案,網上的教程裡會說這個程式是自動執行的,而實際上沒有,所以要單獨執行才能在宿主機器的瀏覽器中看到這個網頁。
  2. 掛載磁碟
    一開始我在docker-machine裡掛載磁碟的時候使用mount命令都會提示permission denied的提示,後來發現是因為許可權問題?不過為了解決4,5兩個問題的方法就是通過
docker run -it -p 8888:8888 -v /home/project/data:/data b.gcr.io/tensorflow/tensorflow bash

這個命令開啟docker machine就可以了。
到現在開始——tensorflow的環境就配置好了。接下來就是tensorflow的學習啦~