① lstm做交通預測的輸入輸出是什麼樣的
間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等
RNN 和 LSTM 模型
時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。
典型的RNN網路結構如下:
② Istm比rnn多了什麼模塊
多了一個藍牙模塊!!
③ 為什麼說gru和lstm可以解決傳統rnn梯度消失的問題
在向量微積分中,標量場的梯度是一個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐幾里得空間Rn到R的函數的梯度是在Rn某一點最佳的線性近似。在這個意義上,梯度是雅可比矩陣的一個特殊情況。
④ 如何用Tensorflow實現RNN
class TextLoader():
def __init__(self, data_dir, batch_size, seq_length, encoding='utf-8'):
self.data_dir = data_dir
self.batch_size = batch_size
self.seq_length = seq_length
self.encoding = encoding
#第一次運行程序時只有input.txt一個文件,剩下兩個文件是運行之後產生的
input_file = os.path.join(data_dir, "input.txt")
vocab_file = os.path.join(data_dir, "vocab.pkl")
tensor_file = os.path.join(data_dir, "data.npy")
#如果是第一次執行則調用preprocess函數,否則調用load_preprocessed函數。
if not (os.path.exists(vocab_file) and os.path.exists(tensor_file)):
print("reading text file")
self.preprocess(input_file, vocab_file, tensor_file)
else:
print("loading preprocessed files")
self.load_preprocessed(vocab_file, tensor_file)
self.create_batches()
self.reset_batch_pointer()
def preprocess(self, input_file, vocab_file, tensor_file):
with codecs.open(input_file, "r", encoding=self.encoding) as f:
data = f.read()
#使用Counter函數對輸入數據進行統計。counter保存data中每個字元出現的次數
counter = collections.Counter(data)
#對counter進行排序,出現次數最多的排在前面
count_pairs = sorted(counter.items(), key=lambda x: -x[1])
#將data中出現的所有字元保存,這里有65個,所以voacb_size=65
self.chars, _ = zip(*count_pairs)
self.vocab_size = len(self.chars)
#按照字元出現次數多少順序將chars保存,vocab中存儲的是char和順序,這樣方便將data轉化為索引
self.vocab = dict(zip(self.chars, range(len(self.chars))))
with open(vocab_file, 'wb') as f:
#保存chars
cPickle.mp(self.chars, f)
#將data中每個字元轉化為索引下標。
self.tensor = np.array(list(map(self.vocab.get, data)))
np.save(tensor_file, self.tensor)
def load_preprocessed(self, vocab_file, tensor_file):
#如果是第二次運行,則可以直接讀取之前保存的chars和tensor
with open(vocab_file, 'rb') as f:
self.chars = cPickle.load(f)
self.vocab_size = len(self.chars)
self.vocab = dict(zip(self.chars, range(len(self.chars))))
self.tensor = np.load(tensor_file)
self.num_batches = int(self.tensor.size / (self.batch_size *
self.seq_length))
def create_batches(self):
#首先將數據按batch_size切割,然後每個batch_size在按照seq_length進行切割
self.num_batches = int(self.tensor.size / (self.batch_size *
self.seq_length))
if self.num_batches == 0:
assert False, "Not enough data. Make seq_length and batch_size small."
self.tensor = self.tensor[:self.num_batches * self.batch_size * self.seq_length]
xdata = self.tensor
#構造target,這里使用上一個詞預測下一個詞,所以直接將x向後一個字元即可
ydata = np.(self.tensor)
ydata[:-1] = xdata[1:]
ydata[-1] = xdata[0]
#將數據進行切分,這里我們假設數據總長度為10000,batch_size為100, seq_length為10.
# 所以num_batches=10,所以,xdata在reshape之後變成[100, 100],然後在第二個維度上切成10份,
# 所以最終得到[100, 10, 10]的數據
self.x_batches = np.split(xdata.reshape(self.batch_size, -1),
self.num_batches, 1)
self.y_batches = np.split(ydata.reshape(self.batch_size, -1),
self.num_batches, 1)
def next_batch(self):
x, y = self.x_batches[self.pointer], self.y_batches[self.pointer]
self.pointer += 1
return x, y
def reset_batch_pointer(self):
self.pointer = 0
⑤ 只有一層隱藏層的CNN(RNN)算是深度學習嗎
都可以,這個現在沒有特別明晰的界限和定義,不必過分關心.
個人覺得用層數來界定深還是淺有點low, 深度學習與傳統機器學習的最大區別是在於它的彈性,它的層數和結構可以非常方便的的延伸和拓展.
⑥ 實際波動率的概念
要明確實際波動率,首先要從波動率的概念入手。波動率(Volatility):是指關於資產未來價格不確定性的度量。它通常用資產回報率的標准差來衡量。也可以指某一證券的一年最高價減去最低價的值再除以最低價所得到的比率。業內將波動率定義為價格比率自然對數的標准差。波動率的種類有:實際波動率,隱含波動率,歷史波動率等等,實際波動率便是波動率的一種。

