tutorial系列mnist已經玩過了,這篇玩一下 classify_image,其實就是image label。模型已經訓練好的了,直接下載下來在.pb文件中。
本機環境:
Win10 + Python3.5 + tensorflow-1.1.0rc2-cp35-cp35m-win_amd64.whl
調用
maybe_download_and_extract函數中的urllib.request.urlretrieve()方法出錯,出現了一個證書認證的錯誤。
錯誤:
ssl.CertificateError: hostname
SSL:全名
解決:
在代碼中使用非認證的ssl內容:Secure socket layer安全套接字層,是一個由第三方機構來保證用戶端和服務器能夠使用安全加密鏈接通道通信的協議。它會給受信任的服務器頒發證書CA,這份證書用來秘密傳遞公鑰。他們都是使用公鑰加密數據,然后使用各自的私鑰來進行解密。
“公共密鑰可廣泛使用。相反,專用密鑰為特定個人所有。將公共密鑰傳送至用戶的分發機制稱為證書。證書一般由證書頒發機構 (CA) 簽名,以確認公共密鑰來自於要求發送公共密鑰的主體。CA 是相互信任的實體。
數字認證的典型實現包括證書簽名過程。該過程如下圖中所示。”

1. |
Alice 將一個簽名的證書請求發送到 CA,該證書包含有她的姓名、公共密鑰以及可能的附加信息。 |
2. |
CA 根據 Alice 的請求創建一個消息。CA 使用自己的專用密鑰對消息進行簽名,以創建一個單獨的簽名。CA 將消息和簽名返回給 Alice。Alice 的證書中包含了消息和簽名。 |
3. |
Alice 將她的證書發送給 Bob,讓他有權訪問她的公共密鑰。 |
4. |
Bob 使用 CA 的公共密鑰驗證證書的簽名。如果證明簽名有效,則他會接受證書中的公共密鑰作為 Alice 的公共密鑰。 |
import ssl ssl._create_default_https_context = ssl._create_unverified_context
錯誤:
TensorFlow 中的路徑錯誤的問題
原因:
這個tutorial例子都是按照Linux下的路徑寫的比如./tmp/imagenet
如果是win下記得改成.//tmp//imagenet
所以第一件事兒是改路徑,改路徑!
注意:
不管是在 docker還是在 Windows下運行 ,都你只需要將py中路徑格式寫成當前系統相關的路徑格式就好了。比如 windows 下就是\\ linux下 /
如果需要label自己的image,那么需要修改image_file的default = 絕對路徑
parser.add_argument( '--image_file', type=str, default='C:\\Users\\501-PC\\Desktop\\models-master\\tutorials\\image\\imagenet\\pipos.jpg', help='Absolute path to image file.' )
關於下載下來的壓縮包中包含的文件:
classify_image_graph_def.pb 里面存放的是已經訓練好的model的結果。包括:權重weight 以及 圖graph
imagenet_synset_to_human_label_map.txt 存放的是label的text內容 與 ImageNet_synset的對應。 example: n00007846 person, individual, someone, somebody, mortal, soul
imagenet_2012_challenge_label_map_proto.pbtxt 存放的是ImageNet 2012 全部數據的UID 與其 目標類型int32
entry { target_class: 449 target_class_string: "n01440764" }
cropped_panda.jpg 就是那張可愛的panda了
綜上,classify_image.py 是一個很好的練習使用 已經訓練好的模型來使用自己的input得到結果的 tutorial。