天天看點

3-1長短時記憶神經網絡(LSTM)--簡單代碼實作

點選檢視完整代碼http://www.daimapi.com/neuralnetwork3_1/

LSTM(Long Short-Term Memory)是長短期記憶網絡,是一種時間遞歸神經網絡,适合于處理和預測時間序列中間隔和延遲相對較長的重要事件。LSTM 已經在科技領域有了多種應用。基于LSTM的系統可以學習翻譯語言、控制機器人、圖像分析、文檔摘要、語音識别圖像識别、手寫識别、控制聊天機器人、預測疾病、點選率和股票、合成音樂等等任務。

該代碼不使用任何第三方深度學習工具包實作,利用Python3實作。

# -*- coding: utf-8 -*-
import copy, numpy as np
np.random.seed(0)

# 計算sigmoid函數的值
def sigmoid(x):
    output = 1/(1+np.exp(-x))
    return output

# 利用sigmoid函數計算誤差
def sigmoid_output_to_derivative(output):
    return output*(1-output)

# 訓練資料集并進行疊代
int2binary = {}
binary_dim = 8

largest_number = pow(2,binary_dim)
binary = np.unpackbits(np.array([range(largest_number)],dtype=np.uint8).T,axis=1)
for i in range(largest_number):
    int2binary[i] = binary[i]

# 設定LSTM的參數
alpha = 0.1
input_dim = 2
hidden_dim = 16
output_dim = 1

# 初始化神經網絡的權重
synapse_0 = 2*np.random.random((input_dim,hidden_dim)) - 1
synapse_1 = 2*np.random.random((hidden_dim,output_dim)) - 1
synapse_h = 2*np.random.random((hidden_dim,hidden_dim)) - 1

synapse_0_update = np.zeros_like(synapse_0)
synapse_1_update = np.zeros_like(synapse_1)
synapse_h_update = np.zeros_like(synapse_h)

# 進行訓練
for j in range(10000):
           

繼續閱讀