學(xué)習(xí)筆記-第二章 深度學(xué)習(xí)概論與PaddlePaddle入門

人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí)

1 人工智能 Artificial Intelligence

*達(dá)特茅斯學(xué)院 - 1956 -
一門交叉學(xué)科凿可,涉及數(shù)學(xué)黔宛、計(jì)算機(jī)科學(xué)凉馆、控制論、信息論、心理學(xué)、哲學(xué)等學(xué)科的邊緣學(xué)科

2 機(jī)器學(xué)習(xí)

*卡耐基梅隆大學(xué)-1997 -

如果一個(gè)程序可以在任務(wù)T上,隨著經(jīng)驗(yàn)E的增加葛碧,效果P也可以隨之增加,則這個(gè)程序可以從經(jīng)驗(yàn)中學(xué)習(xí)
機(jī)器學(xué)習(xí)的傳統(tǒng)算法包括決策樹學(xué)習(xí)过吻、推到邏輯規(guī)劃吹埠、聚類、分類疮装、回歸缘琅、貝葉斯網(wǎng)絡(luò)、神經(jīng)網(wǎng)絡(luò)

3 深度學(xué)習(xí)

深度學(xué)習(xí)系統(tǒng)是輸入層廓推,隱層刷袍,輸出層的多層網(wǎng)絡(luò)
深度學(xué)習(xí)不是萬能的,像很多方法一樣樊展,他需要結(jié)合特定領(lǐng)域的先驗(yàn)知識(shí)

深度學(xué)習(xí)是大腦呻纹,機(jī)器學(xué)習(xí)是腦殼,人工智能就是四肢

深度學(xué)習(xí)的發(fā)展歷程

1 神經(jīng)網(wǎng)絡(luò)的第一次高潮

1957-Frank-感知機(jī)

2 神經(jīng)網(wǎng)絡(luò)的第一次寒冬

1969-Marvin 能力有限只能分析線性問題专缠,對(duì)于異或問題束手無策-多層感知機(jī)

3 神經(jīng)網(wǎng)路的第二次高潮

1986-BP算法(反向傳播算法)-自然雜志

4 神經(jīng)網(wǎng)絡(luò)的第二次寒冬

1989-卷積神經(jīng)網(wǎng)絡(luò)(CNN) -梯度爆炸問題
1998-SVM算法(支持向量機(jī))貝爾實(shí)驗(yàn)室

5 深度學(xué)習(xí)的來臨

??《A Fast Learning Algorithm for Deep Belif Nets》

深度學(xué)習(xí)崛起的時(shí)代背景

算法有了雷酪,計(jì)算性能提升了,數(shù)據(jù)也有了

深度學(xué)習(xí)的應(yīng)用場(chǎng)景

圖像與視覺

  • ImageNet 比賽 2013年
  • 人臉識(shí)別
  • 以圖搜圖

語音識(shí)別

2009年 高斯混合模型(GMM)被擊敗涝婉,語音識(shí)別領(lǐng)域首次成功
2016年百度語音識(shí)別準(zhǔn)確率高達(dá)97%

自然語言處理

  • 情感分析
  • 文本生成
  • 語言翻譯
  • 聊天機(jī)器人

個(gè)性化推薦

CTR(Click-Through-Rate) 點(diǎn)擊通過率

常見的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)

全連接網(wǎng)絡(luò)結(jié)構(gòu) FC FullConnected

卷積神經(jīng)網(wǎng)絡(luò) CNN Convolutional nutrual Netwwork

循環(huán)神經(jīng)網(wǎng)絡(luò) Recurrent Netural Network

機(jī)器學(xué)習(xí)回顧

輸入數(shù)據(jù)-> 機(jī)器學(xué)習(xí)方法 -> 估計(jì)函數(shù)
新數(shù)據(jù) ->估計(jì)函數(shù) ->預(yù)測(cè)結(jié)果

線性回歸的基本概念

  • 什么是線性回歸

存在一個(gè)點(diǎn)集哥力,用一條曲線去擬合它的過程。如果擬合曲線是直線,就是線性回歸吩跋,如果是曲線就是二次回歸

  • 基本概念:
    假設(shè)函數(shù)(Hypothesis Function),用數(shù)學(xué)方法描述自變量和因變量之間的為一種函數(shù)關(guān)系
    損失函數(shù)(Loss Function )寞射,用數(shù)學(xué)方法描述假設(shè)函數(shù)的預(yù)測(cè)值和真實(shí)值之間的誤差。均方差??(Mean Squared Error)一種損失函數(shù)锌钮,交叉熵??也是
    優(yōu)化算法(Optimization Algorithm)
  • 數(shù)據(jù)處理
    1 選取有用的維度
    2 是否處理離散值
    3 歸一化(Mormalization)把各維的屬性的取值范圍放縮的差不多的區(qū)間:減掉均值桥温,然后除以原值取范圍

進(jìn)行歸一化的原因:1 ) 過大或者過小的數(shù)值范圍會(huì)導(dǎo)致計(jì)算時(shí)的浮點(diǎn)上溢或者下溢出;2 )不同的數(shù)值范圍會(huì)導(dǎo)致不同屬性對(duì)模型的重要性不同(至少在初始階段如此)梁丘,而這個(gè)假設(shè)常常不合理的侵浸。這回對(duì)優(yōu)化過程造成困難,使得使用時(shí)間大大加長(zhǎng)氛谜;3 )很多機(jī)器學(xué)習(xí)技巧/模型(L1通惫,L2正則項(xiàng),向量空間模型-Vector Space)都基于這樣的假設(shè):所有的屬性取汁差不多都是以0為均值切取值范圍是相近的

4 分割數(shù)據(jù)考慮的因素:更多的訓(xùn)練數(shù)據(jù)會(huì)降低參數(shù)估計(jì)的方差混蔼,從而得倒更可信的模型,而更多的測(cè)試數(shù)據(jù)會(huì)降低測(cè)試誤差的方差珊燎,從而得到更可信的測(cè)試誤差
5 驗(yàn)證集:僅針對(duì)復(fù)雜模型惭嚣,因?yàn)橛泻芏喑瑓?shù)(Hyperparameter)要調(diào)整

  • 模型概覽(房?jī)r(jià)預(yù)測(cè))
  • 效果展示(房?jī)r(jià)預(yù)測(cè))

深度學(xué)習(xí)框架介紹

深度學(xué)習(xí)框架的作用

  • 簡(jiǎn)化計(jì)算圖的搭建
    計(jì)算圖(computional gragh)-本質(zhì)上是一個(gè)有向無環(huán)圖,結(jié)點(diǎn)代表函數(shù)悔政,邊代表函數(shù)操作
  • 簡(jiǎn)化偏導(dǎo)計(jì)算
  • 高效運(yùn)行

常見的深度學(xué)習(xí)框架

CNTK | PaddlePaddle | Caffe2 | TensorFlow | PyTorch | MXNet

PaddlePaddle 簡(jiǎn)介

PaddlePaddle是百度開源的晚吞,易學(xué)易用的分布式深度學(xué)習(xí)平臺(tái)


PaddlePaddle 使用

  • docker 安裝
mkdir ~/workspace
cd ~/workspace
touch housing.py

編輯 housing.py

import paddle.v2 as paddle

# 初始化
paddle.init(use_gpu=False,trainer_count=1)
# Configure the natural network
x = paddle.layer.data(name='x',type=paddle.data_type.dense_vector(13))
y_predict = paddle.layer.fc(input=x,size=1,act=paddle.activation.Linear())

with open('/workspace/fit_a_line.tar',r) as f:
      parpameters = paddle.parameters.Parameters.from_tar(f)
# Infer using provided test data
probs = paddle.infer(
           output_layer = y_predict,parameters = parameters,
            input=[item for item in paddle.dateset.uci_housing.test()()])

for i in xrange(len(probs)):
      print 'Predicted price: ${:,.2f}'.format(probs[I][0] * 1000)

運(yùn)行housing.py

docker run --rm -v ~/workspace:/workspace paddle paddle/paddle:latest python /workspace/housing.py

房?jī)r(jià)模型連接
[百度備用]


  • pip 安裝
pip install paddlepaddle 
import paddle.v2 as paddle
# initialize PaddlePaddle
paddle.init(use_gpu=False,trainer_count=1)
# Configure the neural network
x = paddl.layer.data(name='x',type=paddle_type.dense_vector(13))
y_predict = paddle.layer.fc(input=x ,size = 1,act = paddle.activation.Linear())
with open('fit_a_line.tar','r') as f:
      parameters = paddle.parameters.Parameters.from_tar(f)

# infer using provided test data
probs = paddle.infer(
              output_layer=y_predict,parmeters=parameters,
              input=[item for item in paddle.dataset.uci_housing.test()()])
for i in xrange(len(probs)):
      print 'Predicted price:${:,.2f}'.fromat{probs[I][0] * 1000}

PaddlePaddle 實(shí)現(xiàn)

  • 加載包
import matplotlib
matplotlib.use{'Agg'}

import matplotlib.predict as pat
import numpy as np

import paddle.v2 as paddle

  • 數(shù)據(jù)處理
#  1 dataset 初始化
TRAIN_DATA = None
X_RAW = None
TEST_DATA = None
#  2 數(shù)據(jù)載入
def load_data(filename, feature_num=2,ratio=0.8):
"""
載入數(shù)據(jù)并進(jìn)行處理
Args:
      Filename:數(shù)據(jù)儲(chǔ)存文件,從該文件讀取數(shù)據(jù)
      feature_num:數(shù)據(jù)特征數(shù)量
      ratio 訓(xùn)練集占總數(shù)據(jù)集比例
"""
global TRAIN_DATA谋国,TEST_DATA槽地,X_RAW
# data = np.loadtxt() 表示將數(shù)據(jù)載入后以矩陣或向量的形式存儲(chǔ)在data中
# delimiter = ',' 表示以','為分隔符
data = np.loadtxt(filename,delimiter=',')
X_RAW = data.T[0].copy()

# axis= 0 表示按列計(jì)算
# data.shape[0] 表示data中一共有多少列
maximums,minimums,avgs =data.max(axis=0),data.min(axis=0),data.sum(axis=0)/data.shape[0]

# 歸一化 data[:i] 表示第i列元素
for i in xrange(feature_num-1)
        data[:i]  = (data[: i]  - aves[I])/(maximums[i] - minmums[i])
      
# offset 用于劃分訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,例如0.8表示訓(xùn)練數(shù)據(jù)集占80%
offset = int(data.shape[0]*ratio)
TRAIN_DATA = data[:offset].copy
TEST_DATA= data[offset:].copy
#  3 讀取訓(xùn)練數(shù)據(jù) 和讀取測(cè)試數(shù)據(jù)
"""
讀取訓(xùn)練數(shù)據(jù)或測(cè)試數(shù)據(jù)芦瘾,服務(wù)于train()和test()
Args:
    data_set: 要獲取的數(shù)據(jù)集
Return:
    reader:用于獲取訓(xùn)練數(shù)據(jù)集及其標(biāo)簽的生成器
"""
def reader()
      """
      一個(gè)reader
      Args:
      return:
                data[:-1],data[-1:] --使用yield 返回生成器
                data[:-1]表示前n-1個(gè)元素捌蚊,也就是訓(xùn)練數(shù)據(jù),data[-1:1]表示最后一個(gè)元素近弟,也就是對(duì)應(yīng)的標(biāo)簽
      """
      for data in data_set:
            yield data[:-1],data[-1:]
return reader
# 4 獲取訓(xùn)練數(shù)據(jù)集
def train():
    """
    定義一個(gè)reader 來獲取訓(xùn)練數(shù)據(jù)集及其標(biāo)簽
    Args:
    Return:
        read_data --用于獲取訓(xùn)練數(shù)據(jù)集及其標(biāo)簽的reader
    """
global TRAIN_DATA
load_data('data.txt')
return read_data(TRAIN_DATA)
# 5  獲取測(cè)試數(shù)據(jù)集
def test():
"""
定義一個(gè)reader 來獲取測(cè)試數(shù)據(jù)集及其標(biāo)簽
Args:
Return:
    read_data -- 用于獲取測(cè)試數(shù)據(jù)集及其標(biāo)簽的reader
"""
global TEST_DATA
load_data('data.txt')
return read_data(TEST_DATA)
  • 搭建神經(jīng)網(wǎng)絡(luò)
# 1 配置網(wǎng)絡(luò)結(jié)構(gòu)
def network_config():
"""
配置網(wǎng)絡(luò)結(jié)構(gòu)
Args:
Retrun:
        cost:
        parameter:模型參數(shù)
        optimizer:優(yōu)化器
        feeeding:數(shù)據(jù)映射缅糟,python 字典
"""
# 輸入層 paddle.layer.data 表示數(shù)據(jù)層,name='x':名稱為x_input,
# type=paddle.data_type.dense_vector(1):數(shù)據(jù)類型為1維稠密向量
x_input = paddle.layer.data(name='x',
               type=paddle.data_type.dense_vector(1))
# 輸出層:paddle.layer.fc 表示全鏈接層 祷愉,input=x_input 表示該層輸入數(shù)據(jù)層
# size =1:神經(jīng)元個(gè)數(shù)窗宦,act=paddle.activation.Linear(): 激活函數(shù)為L(zhǎng)inear()
# 標(biāo)簽數(shù)據(jù),paddle.layer.data 表示數(shù)據(jù)層二鳄,name='y':名稱為y
y_label = paddle.layer.data(name='y',type=paddle.data_type.dense_vector(1))

# 定義成本函數(shù)為均方差損失函數(shù) square_error_cost
cost = paddle.layer.square_error_cost(input=y_predict,label=y_label)

# 利用cost 創(chuàng)建parameters
parameters = paddle.parameters.create(cost)

# 創(chuàng)建optimizer赴涵,并且初始化momentum,momentum=0 位普通的SGD 優(yōu)化算法
optimizer = paddle.optimizer.Momentum(momnetum=0)

# 數(shù)據(jù)層和數(shù)組索引映射订讼,用于trainer 訓(xùn)練時(shí)喂數(shù)據(jù)
feeding = {'x':0,'y':1}
result = [cost,parameter,optimizer,feeding]
return result
  • 初始化 PaddlePaddle
# 初始化 use_gpu=False 表示不用GPU
def main():
      # init
      paddle.init(use_gpu=False,trainer_count=1)
  • 訓(xùn)練模型
# 1 配置網(wǎng)絡(luò)結(jié)構(gòu)和設(shè)置參數(shù)
cost髓窜,parameters,optimizer欺殿,feeding = network_config()
# 2 記錄成本
costs = []
# 3 創(chuàng)建 訓(xùn)練 trainer
traniner = paddle.trainer.SGD(cost=cost,parameters =parameters,update_equation =optimizer )
# 4 定義事件處理器纱烘,打印訓(xùn)練進(jìn)度

def event_handler(event):
    """
    事件處理器杨拐,可以根據(jù)訓(xùn)練過程的信息作相應(yīng)操作
    Args:
        Event:事件對(duì)象,包含event.pass_id,event.batch_id,event.cost等信息
    """
    if isinstance(event, paddle.event.EndIteration):
          if event.pass_id % 100 = 0:
                print "Pass %d,Batch %d,Cost %f"  % (
                    event.pass_id,event.batch_id,event.cost)
               costs.append(event.cost)
               )
   if isinstance(event, paddle.event.EndPass):
        result = trainer.test(
                      reader=paddle.batch(test(),batch_size=2),
                      feeding=feeding)
       print "Test %d,Cost %f" % (event.pass_id,result.cost) 
        )
# 5 模型訓(xùn)練
# training
trainer.train(
reder=paddle.batch(
        paddle.reader.shuffle(train(),but_size=500),
        batch_size=256),
        feeding=feeding,
        event_handler=event_handler,
        num_passes = 300)
# 6 打印結(jié)果
print_parameters(parameters)
# 7 展示學(xué)習(xí)曲線
plot_cost(costs)
  • 預(yù)測(cè)房?jī)r(jià)
# 1 參數(shù)打印 page 57
def print_parameters(parameters):
      """
          打印訓(xùn)練結(jié)果的參數(shù)以及測(cè)試結(jié)果
          Args:
                  Parameters:訓(xùn)練結(jié)果的參數(shù)
          Return:
      """
      print   " Result parameters as below"
      
      theta_a = parateters.get('____fc_layer_0__.w0')[0]
      theta_b = parameters.get('___fc_layer_0_.wbias')[0]
      
      x_0 = X_RAW[0]
      y_0 = theta_a * TRAIN_DATA[0][0] + theta_b

      x_1 = X_RAW[1]
      y_1 =theta_a *TRAIN_DATA[1][0] + theta_b

      param_a = (y_0 - y_1) / (x_0 - x_1)
      param_b = (y_1 - param_a * x_1)
      print 'a = ',param_a
      print 'b = ',param_b
# 2 展示模型訓(xùn)練曲線 page 58
def_plot_costs(costs):
      """
      利用 costs 展示模型的訓(xùn)練曲線
      Args: 
            Cost: 記錄了訓(xùn)練過程的cost變化的list擂啥,每一百次迭代記錄一次
      Return:
      """
      costs = np.squeeze(costs)
      plt.plot(costs)
      plt.ylabel('cost')
      plt.xlabel('iterations(per hundreds)')
      plt.title("house Price Distributions")
      plt.show()
      plt.savefig("cost.png")
# 3 開始預(yù)測(cè) page 58
if __name__ == '__main__':
       main()
  • 數(shù)據(jù)可視化
# 繪圖 page 59
import numpy as np
import matplotlib.pyplot as plt

def plot_data(data, a,b):
       x = data[:,0]
       y = data[:,1]
       y_predict = x*a + b;
       plt.scatter(x,y,marker='.',c='r',label='True')
       plt.title("House Price Distributions")
       plt.xlabel('House Area')
       plt.ylael('House Proce')
       plt.xlim(0,255)      
       plt.ylim(0,2500)
       predict = plt.plot(x,y_predict,lable='Preidict')
       plt.legend(loc='upper left')
       plt.savefig('result.png')
       plt.show()
       
data = np.loadtxt('data.txt',delimiter=',')
X_RAW = data.T[0].copy()
plot_data(data,7.1,-62.1)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哄陶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哺壶,更是在濱河造成了極大的恐慌屋吨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件山宾,死亡現(xiàn)場(chǎng)離奇詭異至扰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)资锰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門敢课,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绷杜,你說我怎么就攤上這事直秆。” “怎么了鞭盟?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵圾结,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我齿诉,道長(zhǎng)筝野,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任粤剧,我火速辦了婚禮歇竟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抵恋。我一直安慰自己途蒋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布馋记。 她就那樣靜靜地躺著号坡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梯醒。 梳的紋絲不亂的頭發(fā)上宽堆,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音茸习,去河邊找鬼畜隶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的籽慢。 我是一名探鬼主播浸遗,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箱亿!你這毒婦竟也來了跛锌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤届惋,失蹤者是張志新(化名)和其女友劉穎髓帽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脑豹,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑藏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘩欺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必盖。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖俱饿,靈堂內(nèi)的尸體忽然破棺而出歌粥,到底是詐尸還是另有隱情,我是刑警寧澤稍途,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站砚婆,受9級(jí)特大地震影響械拍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜装盯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一坷虑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埂奈,春花似錦迄损、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垮抗,卻和暖如春氏捞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冒版。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工液茎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓捆等,卻偏偏與公主長(zhǎng)得像滞造,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栋烤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容