1. 程式人生 > >從CoreML入門機器學習

從CoreML入門機器學習

人工智慧 && 機器學習

人工智慧就是讓機器擁有和人一樣的智慧,它不僅僅限於機器學習,它還包括其他部分,比如:自然語言處理、計算機視覺等。關係就如圖:p01

其中簡單提示一下:

器學習:資料預處理、線性迴歸、監督學習、加強學習等 Deep Learning:人工神經網路、主成分分析、線性判別分析、模型選擇等

還是一臉懵逼?never mind,不要在意這些細節

什麼是機器學習

  • 機器學習原理:

主要是設計和分析一些讓計算機可以自動“學習”的演算法。機器學習演算法是一類從資料中自動分析獲得規律,並利用規律對未知資料進行預測的演算法 —— “維基百科”

在相當一段時間裡,我們都是生產資料,然後交付機器使用。但是隨著時間的推移,我們發現數據的量已經變得無比龐大且無處不在——圖片、音視訊、文字等等。而機器學習的過程就是從這些資料中找出規律並加以利用的過程。

通俗一點說就是:計算機從歷史資料中找出規律,並且把這些規律用到對未來不確定的場景對策上。簡言之:“使用資料解決問題”

使用案例:Google搜尋引擎、Siri、相簿等

  • 機器學習的過程:

step1: 使用資料:即“訓練”

step2: 解決問題:即“預測”

友情提示:資料才是核心!

說完原理,咱們先來玩一個Google推出的用於講述AI原理的小實驗Teachable Machine

p02

視訊連結

CoreML入門

蘋果的人工智慧舉措:

  • iOS5 推出NSLinguisticTagger用來分析自然語言
  • iOS8 推出Metal對底層GPU進行訪問
  • iOS10 推出BNNS(神經網路子程式) 和 MPSCNN(Metal渲染) 是開發者可以構建用於推理的神經網路。
  • iOS11 推出CoreML和Vision

什麼是CoreML和Vision:

cmd-markdown-logo

Core ML: 是基於底層基本型別而建立的,它包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。是開發者更專注於模型的使用而不是將大量的時間糾結在模型的訓練和演算法上。 即可以直接在app中使用訓練好的模型。(這也秉承了類似蘋果一貫不開源的作風。你永遠不知道它裡面到底做了什麼) Vision:對CoreML中影象分析的模型進行了更高層次的封裝。

接下來,我們通過幾個Demo來體驗一把蘋果帶給我們那些可玩的東西:

01 體驗:

1、利用iOS訓練好的

ResNet50來入門一個可以識別物件的一個訓練好的模型。類似的效果就是(code01):p03

2、利用Inceptionv3 識別照片中的人臉數量(code02):p04

這裡稍微解釋一下Core ML 在程式碼中的使用情況: 最簡單如果不用Vision的話(即不涉及音視訊的情況),那Coremkl 就有兩個部分組成:Input 、output;p05

玩了這兩個demo之後,我們是不是發現蘋果給我們的model型別真的是太少了,而且有的還不準。這時候我們就想到說用除蘋果之外的Model。例如caffe、Keras,TensorFlow, 和SciKit-learn等。OK,接下來,我們去下載一個caffemodel,然後將其轉換成.mlmodel。

02 轉換別人的模型:

轉換工具——Core ML Tools:它是一個可以把模型從機器學習工具箱轉換成Core ML格式的Python包。 1、下載安裝anaconda,完成後可以使用conda命令確認 2、使用conda安裝Python,建議2.7.13

conda install python=2.7.13

3、開闢空間:

conda create --name flower1 #辨別花名

4、安裝包指令(如果沒有安裝pip,就用命令:easy_install pip安裝pip)

pip install -U coremltools

5、進入到flower1 環境

source activate flower

6、ok,這時候就可以使用python做點事情了: 6.1 去剛才的網址下載下來,然後按步驟生成model。

#這裡需要友情提示一下,一般我們用的model會有三個檔案,例如:
#'class_labels.txt':這個檔案是包含所有結果的檔案
#'deploy.prototxt':這個檔案是包含模型結果的檔案
#'oxford102.caffemodel':原始模型檔案,演算法什麼都在這裡

#有的也會有類似'mean.binaryproto'的檔案:它是一個均值檔案

6.2 開始命令生成model:

cd /Users/fengcaifan/Desktop/Caffemodel #記得cd到model資料夾下
python #開始編輯python
import coremltools #匯入coremltools庫
coreml_model = coremltools.converters.caffe.convert(('oxford102.caffemodel','deploy.prototxt'),image_input_names='data',class_labels='class_labels.txt') #convert這個就是將檔案作為一個原組丟進去,比如有均值檔案,這個也直接丟進去就好了;image_input_names='data'輸入資料,class_labels='class_labels.txt' 輸出結果
coreml_model.save('Flowers.mlmodel') #將modle命名後儲存

6.3 這樣就可以直接在xcode上使用Flowers.mlmodel了。(code03) 效果圖:p06

接下來的挑戰就是自己寫Model。然後訓練自己的Model了:

03 建立訓練自己的模型:

善意提醒一下:此時請忽略掉你心裡的各種神奇的演算法(因為我也不會)。咱們就寫一個簡單的從性別和身高預測一個人的體重: 不過這次將所有的內容寫成python檔案,模型轉換的過程也寫成python檔案,程式碼如下:

計算檔案

import numpy as np #numpy科學運算庫

for index in range(0, 1000):
if (np.random.rand() >= 0.5):
gender = 1 # male
else:
gender = 0 # female

height = 7 * np.random.randn() + (172 if (gender == 1) else 163)
standand_weight = (height - 105) if (gender == 1) else (height - 110)
weight = 5 * np.random.randn() + standand_weight

print "%d,%d,%d"%(gender, height, weight)

訓練檔案

from sklearn.linear_model import LinearRegression
import pandas as pd

full_data = pd.read_csv("Data.csv") //資料自己提供
model = LinearRegression() #線性迴歸model
model.fit(full_data[['Gender', 'Height']], full_data["Weight"]) #餵養資料

print model.predict([[1, 172]]) #訓練模型,返回預測結果

模型轉換檔案

from CoreMLModelDemo import model
import coremltools
#使用sklearn建立model
coreml_model = coremltools.converters.sklearn.convert(model, ["gender", "height"], "weight")
#model的一些基本描述
coreml_model.license = 'BSD'
coreml_model.short_description = 'Predicts weight by gender and height'

coreml_model.input_description['gender'] = "Gender:0 for male;1 for female."
coreml_model.input_description['height'] = "Height in cm."
coreml_model.output_description['weight'] = "Weight in kg."
#匯出
coreml_model.save('weight.mlmodel')

最後執行python就可以生成mlmodel了。 效果:p07

隨處可見的TensorFlow

TensorFlow是Google推出的深度學習開源庫: 視為一套用於實現新型機器學習演算法的工具集,它使用資料流圖進行數值計算。TensorFlow分散式計算圖

這是一個TensorFlow分散式計算圖,不知大家能否看懂,反正我沒明白.

conda create -n tensorflow python=2.7.14 #建立環境

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
#新增Anaconda的TUNA映象 因為國外的一般很難安裝成功,所以最好使用這個清華大學提供的TUNA映象

conda config --set show_channel_urls yes # 設定搜尋時顯示通道地址

source activate tensorflow #啟用環境

pip install tensorflow #安裝

# 驗證是否成功
import tensorflow as tf
hello = tf.constant('hello tf')
sess = tf.Session()
print(sess.run(hello)) #列印hello tf

#source deactivate #關閉環境
#conda remove --name tensorflow --all #移除環境

將TensorFlow 部署到iOS專案中的使用結構圖:p08

目前比較流行的機器學習框架包括:caffe tensorflow sklearn caffe:僅僅關注計算機視覺,不夠靈活 sklearn:它是一個簡潔、高效的演算法庫,提供一系列的監督學習和無監督學習的演算法,以用於資料探勘和資料分析。tensorflow比sklearn更底層一定。

擴充套件:

可以去github上檢視Demo,喜歡的話star一下哦githubCSDN