猶記得一週前,對圖形驗證碼有點想法,自信滿滿的去作破解的工做,可是實際被各類打臉,不接觸這行,真不懂裏面的套路;
python
當今在互聯網混,不隨口說出深度學習,人工智能,機器學習,神經網絡等詞,人家都懷疑是個假的互聯網人了,但不知道是否有同窗跟JB同樣,傻傻分不清?
git
深度學習,人工智能,機器學習,神經網絡,這4個詞出現的比較多,可是它們之間有什麼關係呢?尤爲,機器學習跟深度學習區別在哪裏??github
人工智能,英文Artificial Intelligence,簡稱AI,那人工智能的目的是什麼?
網上一大堆,好聽的叫解放/發展生產力,解放人類,總的來講是提升效率
但更好理解就是:偷懶!
算法
好比當你說一句話時,機器可以識別成文字,並理解你話的意思,進行分析和對話等。
數組
人工智能的核心在於智能兩字,那智能怎麼來的?主要歸功於一種實現人工智能的方法--機器學習;
網絡
那目前人工智能的應用場景有哪些:
OCR、語音技術(好比Siri)、大數據應用等~session
機器學習:一種實現人工智能的方法
機器學習最基本的作法,是使用算法來解析數據、從中學習,而後對事件作出決策和預測。
須要用大量的數據來「訓練」,經過各類算法從數據中學習如何完成任務。dom
舉個例子,當瀏覽網上商城時,常常會出現商品推薦的信息。
這是商城根據往期的購物記錄和冗長的收藏清單,識別出這其中哪些是真正感興趣,而且願意購買的產品。
這樣的決策模型,能夠幫助商城爲客戶提供建議並鼓勵產品消費。機器學習
【機器學習有三類】:異步
第一類是無監督學習,指的是從信息出發自動尋找規律,並將其分紅各類類別,有時也稱"聚類問題"。
第二類是監督學習,監督學習指的是給歷史一個標籤,運用模型預測結果。
若有一個水果,咱們根據水果的形狀和顏色去判斷究竟是香蕉仍是蘋果,這就是一個監督學習的例子。
最後一類爲強化學習,是指能夠用來支持人們去作決策和規劃的一個學習方式,它是對人的一些動做、行爲產生獎勵的回饋機制,經過這個回饋機制促進學習,這與人類的學習類似,因此強化學習是目前研究的重要方向之一。
深度學習:一種實現機器學習的技術
深度學習是機器學習的一個子領域,是利用深度的神經網絡,將模型處理得更爲複雜,從而使模型對數據的理解更加深刻;
深度學習的核心是,咱們如今有足夠快的計算機和足夠的數據來實際訓練大型神經網絡
三者的區別和聯繫
機器學習是一種實現人工智能的方法,深度學習是一種實現機器學習的技術。
按照JB的理解,深度學習最終可能會滲透在其餘全部機器學習算法;
固然,並非說深度學習就是萬能的,也並不必定比機器學習牛逼,要根據場景來區別;
人工神經網絡:一種機器學習的算法
以「中止(Stop)標誌牌」爲例,將一箇中止標誌牌圖像的全部元素都打碎,而後用神經元進行「檢查」:八邊形的外形、消防車般的紅顏色、鮮明突出的字母、交通標誌的典型尺寸和靜止不動運動特性等等。神經網絡的任務就是給出結論,它究竟是不是一箇中止標誌牌。神經網絡會根據全部權重,給出一個通過深思熟慮的猜想——「機率向量」。
神經網絡是須要調製、訓練的,否則會很容易出錯的~
ok,講到這裏,感受對這塊信息已經有所瞭解~至少知道這些是什麼東西了;
簡單總結下:
機器學習是一種實現人工智能的方法,深度學習是一種實現機器學習的技術,神經網絡是一種實現機器學習的算法
TensorFlow是Google在2015年11月份開源的人工智能系統Github項目地址,該系統能夠被用於語音識別、圖片識別等多個領域。
官網上對TensorFlow的介紹是,
一個使用數據流圖技術來進行數值計算的開源軟件庫。
TensorFlow是由Google Brain團隊的研發人員負責的項目。
什麼是數據流圖
數據流圖是描述有向圖中的數值計算過程。有向圖中的節點一般表明數學運算,但也能夠表示數據的輸入、輸出和讀寫等操做;有向圖中的邊表示節點之間的某種聯繫,它負責傳輸多維數據(Tensors)。
節點能夠被分配到多個計算設備上,能夠異步和並行地執行操做。由於是有向圖,因此只有等到以前的入度節點們的計算狀態完成後,當前節點才能執行操做。
TensorFlow的特性
找了不少方式,最終無奈放棄,由於都不可行,依賴的東西太多了,最後JB選擇了用pycharm來安裝TensorFlow;
pycharm是python 的IDE軟件,安裝庫起來比較方便,並且寫代碼也不錯;
打開pycharm,在菜單欄裏flie-settings,直接搜索project inter,選擇你用的編譯器,直接點擊+:
輸入tensorflow,install package,而後就是等待漫長的安裝過程了;
固然,喜歡高難度的同窗,能夠看github的官網介紹,祝你好運~
https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/os_setup.md
驗證
直接import tensorflow,運行試試看有沒有問題便可;若是有問題,會直接報錯的~
官網有個例子,直接拿來用了:
import tensorflow as tf
hello = tf.constant("Hello,TensorFlow")
#建立了圖,裏面放入hello,TensorFlow
sess = tf.Session()
#定義了一個會話
print(sess.run(hello))
#執行圖計算
a = tf.constant(10)
b = tf.constant(32)
#建立了圖,裏面放兩個節點,兩個Constant()ops
print(sess.run(a+b))
#執行圖計算,此處是相加
複製代碼
運行結果:
2018-06-14 18:48:55.967672: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
b'Hello,TensorFlow'
42
複製代碼
上面第一行仍是紅色的,雖然不影響結果輸出,可是看着不爽啊;
怎麼作?直接屏蔽就行了~
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2'
複製代碼
import os,加上上面那句便可;不懂什麼意思?來來來~
os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 這是默認的顯示等級,顯示全部信息
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只顯示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只顯示 Error
複製代碼
看了上面的例子,看不出特別的,先來了解下基礎知識吧~
須要理解在TensorFlow中,是如何:
形象的比喻是:把會話看作車間,圖看作車牀,裏面用Tensor作原料,變量作容器,feed和fetch作鏟子,把數據加工成咱們的結果。
圖計算
TensorFlow程序中圖的建立相似於一個 [施工階段],
而在 [執行階段] 則利用一個session來執行圖中的節點。
很常見的狀況是,在 [施工階段] 建立一個圖來表示和訓練神經網絡,而在 [執行階段] 在圖中重複執行一系列的訓練操做。
第一個例子那有說明圖是怎麼建立的,這裏再舉例說明下:
matrix1 = tf.constant([[3.,3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1,matrix2)
#建立一個矩陣乘法
#默認的圖,有3個節點,兩個constant和一個matmul
sess = tf.Session()
#定義一個會話
result = sess.run(product)
#運算乘法,獲得結果
print(result)
sess.close()
#關閉會話
複製代碼
若是須要使用GPU,則以下處理:
with tf.Session() as sess:
with tf.device("/cpu:0"):
matrix1 = tf.constant([[3,3]])
#這是一行2列
matrix2 = tf.constant([[2],[2]])
#這個是兩行1列
product = tf.matmul(matrix1,matrix2)
#建立一個矩陣乘法
#默認的圖,有3個節點,兩個constant和一個matmul
sess = tf.Session()
#定義一個會話
result = sess.run(product)
#運算乘法,獲得結果
print(result)
sess.close()
#關閉會話
複製代碼
device中的各個字符串含義以下:
常量
tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False),value爲值,dtype類型,shape爲張量形狀,name名稱、verify_shape默認False,這些項可選。做用建立一個常量。
a = tf.constant(2, name="a") # print(a) = 2
b = tf.constant(2.0, dtype=tf.float32, shape=[2,2], name="b") # 2x2矩陣,值爲2
c = tf.constant([[1, 2], [3, 4]], name="c") # 2x2矩陣,值1,2,3,4
複製代碼
是否是懵逼了?沒事,留個大概影響就行了~
num = tf.Variable(0,name = "count")
#建立一個變量num
new_value = tf.add(num,10)
#建立一個加法操做,把當前的數字+10
op = tf.assign(num,new_value)
#建立一個賦值操做,把new_value賦值給num
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#初始化變量
print(sess.run(num))
for i in range(5):
#建立一個for循環,循環5次
sess.run(op)
#執行op的賦值操做
print(sess.run(num))
#輸出num
輸出的結果:
0
10
20
30
40
50
複製代碼
有的時候,會在聲明變量的時候不賦值,計算的時候才進行賦值,這個時候feed就派上用場了
input1 = tf.placeholder(tf.float32)
#建立一個變量佔位符input1
input2 = tf.placeholder(tf.float32)
#建立一個變量佔位符input2
mul = tf.multiply(input1, input2)
#乘法操做
with tf.Session() as sess:
result = sess.run([mul], feed_dict={input1:[7.], input2:[2.]})
#在運算時,用feed設置兩個輸入的值
print(result)
複製代碼
import tensorflow as tf
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2'
import numpy as np
x_data = np.random.rand(100).astype("float32")
y_data = x_data * 0.1 + 0.3
# 模擬生成100對數據對, 對應的函數爲y = x * 0.1 + 0.3
# numpy是Python的一個科學計算庫,提供矩陣運算的功能
# astype是轉換數組的數據類型
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
#產生尺寸爲1的張量
y = W * x_data + b
# 指定w和b變量的取值範圍(注意咱們要利用TensorFlow來獲得w和b的值)
# tf.random_uniform,TensorFlow隨機值函數,返回1矩陣,數值產生於-1.0跟1.0之間
loss = tf.reduce_mean(tf.square(y - y_data))
#reduce_mean求平均值
#square是對裏面的值求平方操做
optimizer = tf.train.GradientDescentOptimizer(0.5)
#這個類是實現梯度降低算法的優化器,第一個參數是要使用的學習率
train = optimizer.minimize(loss)
# 最小化均方偏差
init = tf.global_variables_initializer()
# 初始化TensorFlow參數
sess = tf.Session()
sess.run(init)
# 運行數據流圖(注意在這一步纔開始執行計算過程)
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
# 觀察屢次迭代計算時,w和b的擬合值
# 最好的狀況是w和b分別接近甚至等於0.1和0.3
複製代碼
輸出的結果:
0 [-0.39065683] [0.66207296]
20 [-0.0082044] [0.3498935]
40 [0.07841039] [0.30995506]
60 [0.09569232] [0.3019863]
80 [0.09914052] [0.30039632]
100 [0.09982852] [0.30007908]
120 [0.09996579] [0.30001578]
140 [0.09999318] [0.30000314]
160 [0.09999864] [0.30000064]
180 [0.09999974] [0.30000013]
200 [0.09999995] [0.30000004]
複製代碼
每執行20次輸出一次數據,從上面的結果能夠看到,隨着次數的增長,w跟b的值愈來愈靠近0.1跟0.3;
JB很好奇,爲何會這這樣?從上面的代碼,沒作什麼嗎?這個呢?估計要看TensorFlow的源碼了,感興趣的同窗,看完後記得分享下~
本章就介紹到這裏了,原本還想介紹hello world的,可是考慮總體章節會比較長,就放下文吧~
來個例行總結,本文主要講解人工智能的相關概念,以及TensorFlow的基礎用法,也結合一個例子來證實TensorFlow的效果,至於源碼嘛,JB也不懂,就是以爲TensorFlow很牛逼的感受~
而咱們最終的目的,是但願用TensorFlow來訓練本身的模型,來提升圖形驗證碼的識別率;
謝謝你們~