1. 程式人生 > >普惠AI時代,抓住機遇奮力一搏

普惠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做的實操,希望對大家有所幫助。

邏輯:

  1. 我從網上下載了十幾張貓和狗的圖片,用於檢驗我們訓練好的模型。
  2. 處理我們下載的圖片
  3. 載入模型
  4. 將圖片輸入模型進行檢驗

程式碼如下:

#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。