普惠AI時代,抓住機遇奮力一搏
現在大家都在討論AI,就如同當年網際網路浪潮前夜一般。但不同的是,網際網路浪潮來臨之前,很多人看不清網際網路是什麼,它能幹什麼,所以很少有人會冒險的去嚐鮮。但在當下,AI技術並未成熟,AI時代也並未真正到來,已經有很多廠商和企業都在討論如何利用AI技術賦能行業,如同我一般的開發者,也開始大膽的嘗試各種AI開發技術,希望可以在“前夜”佔得一席先機。
但很顯然,對於我們真真正正做開發的人來說,現在可以為我們提供AI開發技術和能力的平臺並不多,大部分雲服務商還是更加註重雲基礎架構的應用與服務升級。我認為,在現在這個雲和AI的過度時期,AI能力不足的雲服務廠商還有一席喘息之地,還有一些生存空間。但是一旦普惠AI時代到來,即AI成為一種通用技術,隨時可呼叫,開箱即用,簡單便宜之後,AI能力不足的雲服務商必定將會毫無生存空間。所以如果不重視AI能力的提升,那麼必然難以立足於將來的雲服務市場。
現在市場上有很多雲服務商預見到了普惠AI時代的到來,國外Google推出了TensorFlow,即 An open-source software library for Machine Intelligence,一個開源的機器學習庫,目前是最流行的人工智慧的演算法引擎,提供了深度學習的基本元素的實現。國內百度推出了PaddlePaddle,它的設計和定位比較集中在“易用、高效、靈活、可擴充套件”上,對很多演算法進行了完整的封裝,包括閱讀理解、自動問答、影象分類、目標檢測、場景文字識別、語音識別等多個技術領域人工智慧的通用解決方案。當然市場上,還有一些流行框架,比如Theano, Torch, Caffe等等,深受開發者們歡迎。
但我認為,無論是TensoFlow還是PaddlePaddle,它們都沒解決孤點式開發問題,現在我們還只能是寫程式碼在一個平臺,測試在另一個平臺,部署又放在其他終端,是否有一個廠商可以將這些點串聯起來,從雲、邊、端統一完成所有步驟,讓開發變得真正簡單易用,那將是我們最期待的。據說華為將在10月全聯接大會上,釋出一個全棧全場景的AI開發框架,希望可以儘快體驗到。
那麼接下來,我給大家分享一個我用TensorFlow做的實操,希望對大家有所幫助。
邏輯:
- 我從網上下載了十幾張貓和狗的圖片,用於檢驗我們訓練好的模型。
- 處理我們下載的圖片
- 載入模型
- 將圖片輸入模型進行檢驗
程式碼如下:
#coding=utf-8 import tensorflow as tf from PIL import Image import matplotlib.pyplot as plt import input_data import numpy as np import model import os #從指定目錄中選取一張圖片 def get_one_image(train): files = os.listdir(train) n = len(files) ind = np.random.randint(0,n) img_dir = os.path.join(train,files[ind]) image = Image.open(img_dir) plt.imshow(image) plt.show() image = image.resize([208, 208]) image = np.array(image) return image def evaluate_one_image(): #存放的是我從百度下載的貓狗圖片路徑 train = '/Users/yangyibo/GitWork/pythonLean/AI/貓狗識別/testImg/' image_array = get_one_image(train) with tf.Graph().as_default(): BATCH_SIZE = 1 # 因為只讀取一副圖片 所以batch 設定為1 N_CLASSES = 2 # 2個輸出神經元,[1,0] 或者 [0,1]貓和狗的概率 # 轉化圖片格式 image = tf.cast(image_array, tf.float32) # 圖片標準化 image = tf.image.per_image_standardization(image) # 圖片原來是三維的 [208, 208, 3] 重新定義圖片形狀 改為一個4D 四維的 tensor image = tf.reshape(image, [1, 208, 208, 3]) logit = model.inference(image, BATCH_SIZE, N_CLASSES) # 因為 inference 的返回沒有用啟用函式,所以在這裡對結果用softmax 啟用 logit = tf.nn.softmax(logit) # 用最原始的輸入資料的方式向模型輸入資料 placeholder x = tf.placeholder(tf.float32, shape=[208, 208, 3]) # 我門存放模型的路徑 logs_train_dir = '/Users/yangyibo/GitWork/pythonLean/AI/貓狗識別/saveNet/' # 定義saver saver = tf.train.Saver() with tf.Session() as sess: print("從指定的路徑中載入模型。。。。") # 將模型載入到sess 中 ckpt = tf.train.get_checkpoint_state(logs_train_dir) if ckpt and ckpt.model_checkpoint_path: global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] saver.restore(sess, ckpt.model_checkpoint_path) print('模型載入成功, 訓練的步數為 %s' % global_step) else: print('模型載入失敗,,,檔案沒有找到') # 將圖片輸入到模型計算 prediction = sess.run(logit, feed_dict={x: image_array}) # 獲取輸出結果中最大概率的索引 max_index = np.argmax(prediction) if max_index==0: print('貓的概率 %.6f' %prediction[:, 0]) else: print('狗的概率 %.6f' %prediction[:, 1]) # 測試 evaluate_one_image()
/Users/yangyibo/GitWork/pythonLean/AI/貓狗識別/testImg/ 存放的是我從百度下載的貓狗圖片
執行結果:
因為從testimg 中選取圖片是隨機的,所以每次執行的結果不同
從指定的路徑中載入模型。。。。
模型載入成功, 訓練的步數為 11999
狗的概率 0.964047
[Finished in 6.8s]
歡迎star。