中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解-創(chuàng)新互聯(lián)

本文實(shí)例講述了Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法。分享給大家供大家參考,具體如下:

豐潤(rùn)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

1、概念

1.1、循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)是一類以序列數(shù)據(jù)為輸入,在序列的演進(jìn)方向進(jìn)行遞歸且所有節(jié)點(diǎn)(循環(huán)單元)按鏈?zhǔn)竭B接的遞歸神經(jīng)網(wǎng)絡(luò)。

卷積網(wǎng)絡(luò)的輸入只有輸入數(shù)據(jù)X,而循環(huán)神經(jīng)網(wǎng)絡(luò)除了輸入數(shù)據(jù)X之外,每一步的輸出會(huì)作為下一步的輸入,如此循環(huán),并且每一次采用相同的激活函數(shù)和參數(shù)。在每次循環(huán)中,x0乘以系數(shù)U得到s0,再經(jīng)過系數(shù)W輸入到下一次,以此循環(huán)構(gòu)成循環(huán)神經(jīng)網(wǎng)絡(luò)的正向傳播。

Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解       Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解    Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

在反向傳播中要求損失函數(shù)E對(duì)參數(shù)W的導(dǎo)數(shù),通過鏈?zhǔn)角髮?dǎo)法則可以得到右下的公式

Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解   Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

循環(huán)神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)作比較,卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)輸出經(jīng)過網(wǎng)絡(luò)產(chǎn)生一個(gè)輸出。而循環(huán)神經(jīng)網(wǎng)絡(luò)可以實(shí)現(xiàn)一個(gè)輸入多個(gè)輸出(生成圖片描述)、多個(gè)輸入一個(gè)輸出(文本分類)、多輸入多輸出(機(jī)器翻譯、視頻解說)。

RNN使用的是tan激活函數(shù),輸出在-1到1之間,容易梯度消失。距離輸出較遠(yuǎn)的步驟對(duì)于梯度貢獻(xiàn)很小。

將底層的輸出作為高層的輸入就構(gòu)成了多層的RNN網(wǎng)絡(luò),而且高層之間也可以進(jìn)行傳遞,并且可以采用殘差連接防止過擬合。

1.2、長(zhǎng)短期記憶網(wǎng)絡(luò)

RNN的每次傳播之間只有一個(gè)參數(shù)W,用這一個(gè)參數(shù)很難描述大量的、復(fù)雜的信息需求,為了解決這個(gè)問題引入了長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short Term Memory,LSTM)。這個(gè)網(wǎng)絡(luò)可以進(jìn)行選擇性機(jī)制,選擇性的輸入、輸出需要使用的信息以及選擇性地遺忘不需要的信息。選擇性機(jī)制的實(shí)現(xiàn)是通過Sigmoid門實(shí)現(xiàn)的,sigmoid函數(shù)的輸出介于0到1之間,0代表遺忘,1代表記憶,0.5代表記憶50%

LSTM網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,

Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解    Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

如上右圖所示為本輪運(yùn)算的隱含狀態(tài)state,當(dāng)前狀態(tài)由上一狀態(tài)和遺忘門結(jié)果作點(diǎn)積,再加上傳入們結(jié)果得到

如下左圖所示為遺忘門結(jié)構(gòu),上一輪的輸出ht-1和數(shù)據(jù)xt在經(jīng)過遺忘門選擇是否遺忘之后,產(chǎn)生遺忘結(jié)果ft

如下中圖所示為傳入門結(jié)構(gòu),ht-1和xt在經(jīng)過遺忘門的結(jié)果it和tanh的結(jié)果Ct作點(diǎn)積運(yùn)算得到本次運(yùn)算的輸入

如下右圖所示為輸出門結(jié)構(gòu),ht-1和xt經(jīng)過遺忘門的結(jié)果ot與當(dāng)狀態(tài)作點(diǎn)積產(chǎn)生本次的輸出

Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解  Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解  Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

如下實(shí)現(xiàn)LSTM網(wǎng)絡(luò),首先定義_generate_params函數(shù)用于生成每個(gè)門所需的參數(shù),調(diào)用該函數(shù)定義輸入門、輸出門、遺忘門、和中間狀態(tài)tanh的參數(shù)。每個(gè)門的參數(shù)都是三個(gè),輸入x、h的權(quán)重和偏置值。

接著開始進(jìn)行LSTM的每輪循環(huán)計(jì)算,輸入門計(jì)算就是將輸入embedded_input矩陣乘以輸入門參數(shù)x_in,再加上h和對(duì)應(yīng)參數(shù)相乘的結(jié)果,最后再加上偏置值b_in經(jīng)過sigmoid便得到輸入門結(jié)果。

同理進(jìn)行矩陣相乘加偏置操作得到遺忘門、輸出門的結(jié)果。中間態(tài)tanh與三個(gè)門的操作類似,只不過最后經(jīng)過tanh函數(shù)。

將上一個(gè)隱含態(tài)state乘以遺忘門加上輸入門乘以中間態(tài)的結(jié)果就得到當(dāng)前的隱含態(tài)state

將當(dāng)前的state經(jīng)過tanh函數(shù)再加上輸出門就得到本輪的輸出h

經(jīng)過多輪輸入循環(huán)得到的就是LSTM網(wǎng)絡(luò)的最后輸出。

# 實(shí)現(xiàn)LSTM網(wǎng)絡(luò)
  # 生成Cell網(wǎng)格所需參數(shù)
  def _generate_paramas(x_size, h_size, b_size):
    x_w = tf.get_variable('x_weight', x_size)
    h_w = tf.get_variable('h_weight', h_size)
    bias = tf.get_variable('bias', b_size, initializer=tf.constant_initializer(0.0))
    return x_w, h_w, bias
 
  scale = 1.0 / math.sqrt(embedding_size + lstm_nodes[-1]) / 3.0
  lstm_init = tf.random_uniform_initializer(-scale, scale)
  with tf.variable_scope('lstm_nn', initializer=lstm_init):
    # 輸入門參數(shù)
    with tf.variable_scope('input'):
      x_in, h_in, b_in = _generate_paramas(
        x_size=[embedding_size, lstm_nodes[0]],
        h_size=[lstm_nodes[0], lstm_nodes[0]],
        b_size=[1, lstm_nodes[0]]
      )
    # 輸出門參數(shù)
    with tf.variable_scope('output'):
      x_out, h_out, b_out = _generate_paramas(
        x_size=[embedding_size, lstm_nodes[0]],
        h_size=[lstm_nodes[0], lstm_nodes[0]],
        b_size=[1, lstm_nodes[0]]
      )
    # 遺忘門參數(shù)
    with tf.variable_scope('forget'):
      x_f, h_f, b_f = _generate_paramas(
        x_size=[embedding_size, lstm_nodes[0]],
        h_size=[lstm_nodes[0], lstm_nodes[0]],
        b_size=[1, lstm_nodes[0]]
      )
    # 中間狀態(tài)參數(shù)
    with tf.variable_scope('mid_state'):
      x_m, h_m, b_m = _generate_paramas(
        x_size=[embedding_size, lstm_nodes[0]],
        h_size=[lstm_nodes[0], lstm_nodes[0]],
        b_size=[1, lstm_nodes[0]]
      )
 
    # 兩個(gè)初始化狀態(tài),隱含狀態(tài)state和初始輸入h
    state = tf.Variable(tf.zeros([batch_size, lstm_nodes[0]]), trainable=False)
    h = tf.Variable(tf.zeros([batch_size, lstm_nodes[0]]), trainable=False)
    # 遍歷LSTM每輪循環(huán),即每個(gè)詞的輸入過程
    for i in range(max_words):
      # 取出每輪輸入,三維數(shù)組embedd_inputs的第二維代表訓(xùn)練的輪數(shù)
      embedded_input = embedded_inputs[:, i, :]
      # 將取出的結(jié)果reshape為二維
      embedded_input = tf.reshape(embedded_input, [batch_size, embedding_size])
      # 遺忘門計(jì)算
      forget_gate = tf.sigmoid(tf.matmul(embedded_input, x_f) + tf.matmul(h, h_f) + b_f)
      # 輸入門計(jì)算
      input_gate = tf.sigmoid(tf.matmul(embedded_input, x_in) + tf.matmul(h, h_in) + b_in)
      # 輸出門
      output_gate = tf.sigmoid(tf.matmul(embedded_input, x_out) + tf.matmul(h, h_out) + b_out)
      # 中間狀態(tài)
      mid_state = tf.tanh(tf.matmul(embedded_input, x_m) + tf.matmul(h, h_m) + b_m)
      # 計(jì)算隱含狀態(tài)state和輸入h
      state = state * forget_gate + input_gate * mid_state
      h = output_gate + tf.tanh(state)
    # 最后遍歷的結(jié)果就是LSTM的輸出
    last_output = h

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁名稱:Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解-創(chuàng)新互聯(lián)
本文URL:http://www.rwnh.cn/article38/cchhpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站改版、定制開發(fā)、用戶體驗(yàn)、全網(wǎng)營(yíng)銷推廣網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
布尔津县| 永胜县| 房山区| 东至县| 金溪县| 霍州市| 镇远县| 舒城县| 肃南| 班玛县| 肥西县| 成武县| 大悟县| 普洱| 闵行区| 隆化县| 额敏县| 宁化县| 蒲城县| 大荔县| 汉源县| 明星| 屯留县| 平遥县| 揭西县| 清徐县| 石嘴山市| 义乌市| 诸城市| 和田县| 灌阳县| 桑日县| 锡林浩特市| 永川市| 峡江县| 陆丰市| 龙岩市| 安塞县| 福建省| 镶黄旗| 新兴县|