通俗易懂的深度學習

簡介

深度學習是機器學習研究中的一個新的領域,其動機在於創建、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。

算法導論和機器學習的異同

相同點:都是輸入,計算,獲得結果。
差別
算法導論
以f(x)=wx爲例,其實就是人爲的設定w的過程。但x是離散變量不是連續變量,否則就是高中數學題了。 html

機器學習: 以f(x)=wx爲例,是經過一個訓練集(x,y),優化w的過程。

神經網絡

神經網絡是機器學習的一種,就是將許多個單一「神經元」聯結在一塊兒,這樣,一個「神經元」的輸出就能夠是另外一個「神經元」的輸入。
通常超過8層的神經網絡模型就叫深度學習。
深度學習解決了淺層神經網絡多層傳遞以後梯度消失和局部最優解的問題。

主要的兩類深度學習

監督學習:
迴歸和分類,迴歸問題一般是用來預測一個值,如預測房價、將來的天氣狀況等等。分類問題是用於將事物打上一個標籤,一般結果爲離散值。例如判斷一幅圖片上的動物是一隻貓仍是一隻狗。 python

無監督學習:
無監督學習裏典型的例子就是聚類了。聚類的目的在於把類似的東西聚在一塊兒,而咱們並不關心這一類是什麼。 算法

神經網絡基礎

注:第二層、第三層的z和a不是同一個值。
輸入:整個訓練集表示爲:
n表明第幾個樣本,i表明某同樣本中某個參數。下面爲舉例說明一個樣本簡寫爲:
輸出:
權重:隨機初始化,神經網絡其實就是計算最佳的權重。
偏置

計算過程:好比第二層 網絡

激活函數:好比激活函數爲sigmoid時,第二層 機器學習

以上是 正向傳播的內容。獲得模型後只需計算到該步。

反向傳播:梯度降低法更新權重w。其中α爲步長。ide

損失函數(Loss Function):是定義在單個樣本上的,算的是一個樣本的偏差。以均方偏差損失函數爲例: 函數

代價函數(Cost Function):是定義在整個訓練集上的,是全部樣本偏差的平均,也就是損失函數的平均。 學習

附,矩陣操做測試

全部的計算過程若是都是這種形式,計算就會顯得很複雜。 優化

因此神經網絡中普遍的使用了矩陣操做。

因此上述一次計算能夠變成(與線代計算過程不一樣,tensorflow具備廣播機制):

Tensorflow

安裝

python環境Anaconda集成安裝

ide Pycharm等

配置清華源

conda config --add channels mirrors.tuna.tsinghua.edu.cn/anaconda/pk…

conda config --set show_channel_urls yes

建立一個python環境

conda create -n tensorflow python=版本號

activate tensorflow(退出deactivate tensorflow)

pip清華源安裝tensorflow

pip install -i pypi.tuna.tsinghua.edu.cn/simple tensorflow

或者全局設置pip源。C:\Users\用戶名\pip\pip.ini,默認狀況下pip文件夾和pip.ini都未建立,自行建立,pip中添加如下內容。

[global]

index-url = pypi.tuna.tsinghua.edu.cn/simple

使用pip install tensorflow

案例

tensorflow mnist

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
 
 
# MNIST數據存放的路徑
file = "./MNIST"
 
# 導入數據
mnist = input_data.read_data_sets(file, one_hot=True)
 
# 模型的輸入和輸出
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
 
# 模型的權重和偏移量
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
 
# 建立Session
sess = tf.InteractiveSession()
# 初始化權重變量
sess.run(tf.global_variables_initializer())
 
# SoftMax激活函數
y = tf.nn.softmax(tf.matmul(x, W) + b)
 
# 交叉熵損失函數
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
 
# 梯度降低法訓練
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
for i in range(1000):
    batch = mnist.train.next_batch(50)
    train_step.run(feed_dict={x: batch[0], y_: batch[1]})
 
 
# 測試
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_:mnist.test.labels}))
複製代碼

參考連接: 吳恩達給你的人工智能第一課

mooc.study.163.com/smartSpec/d…

機器學習的算法和普通《算法導論》裏的算法有什麼本質上的異同?

www.zhihu.com/question/24…

人工智能、機器學習和深度學習的區別?

www.zhihu.com/question/57…

如何簡單形象又有趣地講解神經網絡是什麼?

www.zhihu.com/question/22…

深刻淺出--梯度降低法及其實現

www.jianshu.com/p/c7e642877…

深刻梯度降低(Gradient Descent)算法

www.cnblogs.com/ooon/p/4947…

梯度降低(Gradient Descent)小結(寫了梯度降低和梯度上升)

www.cnblogs.com/pinard/p/59…

一文弄懂神經網絡中的反向傳播法——BackPropagation

www.cnblogs.com/charlotte77…

基於字符的卷積神經網絡實現文本分類(char-level CNN)-論文詳解及tensorflow實現

blog.csdn.net/irving_zhan…

數據挖掘系列(10)——卷積神經網絡算法的一個實現

相關文章
相關標籤/搜索