㈠ 什麼是全連接神經網路怎麼理解「全連接」
1、全連接神經網路解析:對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。
2、全連接的神經網路示意圖:

3、「全連接」是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小。
㈡ 用matlab進行RBF神經網路時間序列預測,預測值為什麼一直不變
可能使用的是以數據訓練的方式後,來預測未來值的吧。你最好把數據和代碼傳上來(其他方式也可以),這樣可以幫查找問題實在。
㈢ 如何在Python中用LSTM網路進行時間序列預測
時間序列模型
時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等
RNN 和 LSTM 模型
時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。
典型的RNN網路結構如下:

4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。
實現代碼
時間間隔序列格式化成所需的訓練集格式
import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back): """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """ dataX, dataY = [], [] for i in range(len(dataset) - look_back): dataX.append(dataset[i:i+look_back]) dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)df = pd.read_csv("path-to-your-time-interval-file") dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里
LSTM網路結構搭建
import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork(): def __init__(self, **kwargs): """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """ self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY): """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """ print "Training model is LSTM network!" input_dim = trainX[1].shape[1] output_dim = trainY.shape[1] # one-hot label # print predefined parameters of current model: model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting model.add(LSTM(output_dim=self.output_dim, input_dim=input_dim, activation=self.activation_lstm, dropout_U=self.drop_out, return_sequences=True)) for i in range(self.lstm_layer-2): model.add(LSTM(output_dim=self.output_dim, input_dim=self.output_dim, activation=self.activation_lstm, dropout_U=self.drop_out, return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer model.add(LSTM(output_dim=self.output_dim, input_dim=self.output_dim, activation=self.activation_lstm, dropout_U=self.drop_out)) for i in range(self.dense_layer-1): model.add(Dense(output_dim=self.output_dim, activation=self.activation_last)) model.add(Dense(output_dim=output_dim, input_dim=self.output_dim, activation=self.activation_last)) # configure the learning process model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file model_json = model.to_json() with open(model_path, "w") as json_file: json_file.write(model_json) # store model weights to hdf5 file if model_weight_path: if os.path.exists(model_weight_path): os.remove(model_weight_path) model.save_weights(model_weight_path) # eg: model_weight.h5 return model這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。
㈣ 我用神經網路做時間序列預測1-8年的數據但是最後出現的預測值還是1-8年的數據
將歷史數據作為樣本訓練,最後用一組對應的樣本作為輸入,輸出自然是未來數據。神經網路預測就是這么做的。
對商品價格變動的分析,可歸結為對影響市場供求關系的諸多因素的綜合分析。傳統的統計經濟學方法因其固有的局限性,難以對價格變動做出科學的預測,而人工神經網路容易處理不完整的、模糊不確定或規律性不明顯的數據,所以用人工神經網路進行價格預測是有著傳統方法無法相比的優勢。從市場價格的確定機制出發,依據影響商品價格的家庭戶數、人均可支配收入、貸款利率、城市化水平等復雜、多變的因素,建立較為准確可靠的模型。該模型可以對商品價格的變動趨勢進行科學預測,並得到准確客觀的評價結果。
㈤ 用神經網路時間序列做預測,預測結果整體還好基本誤差都非常小,但是偶爾的幾個預測值的誤差大的也離譜
0.00002和0.30相差1.5W倍,這肯定是不行的,太不穩定。看看是不是忘記對數據進行歸一化?沒歸一化的話,會導致數量級大的輸入的權值佔主導地位,弱化其他輸入向量維的作用。如果不是歸一化的原因,看看是不是網路結構有問題,例如改變隱層節點數、改變輸入向量結構,或者乾脆換種神經網路。
㈥ BP神經網路做預測的問題
要對8、9數據進行輸入,然後進行編碼,給你個例子。
p=[0.3276 0.4425 0.1092 0.1207 0;
0.1881 0.4161 0.1691 0.2266 0;
0.1077 0.2245 0.1086 0.5532 0.0060;
0.8587 0.0700 0.0449 0.0264 0.0000;
0.6048 0.1492 0.1714 0.0363 0.0383;
0.3183 0.2957 0.0293 0.3183 0.0429]';
t=[1 0 0 0 0 0 ;
0 1 0 0 0 0 ;
0 0 1 0 0 0 ;
0 0 0 1 0 0 ;
0 0 0 0 1 0 ;
0 0 0 0 0 1 ]';
數據為訓練數據
㈦ 關於時間序列預測,預測多少點數合適的問題
擬合結果好,是因為有實際的數據在不斷修正這些方法的偏差。而預測的時候就會有問題,就像你說的,後50個數據預測的會不準。你們導師的意思是對的,我們總感覺樣本數據越多,預測結果越准,其實這是不對的。預測和數據多少無關(最少也得5個以上吧),關鍵是你預測的數據和基年的數據的時間差值,差值越大,偏差越大,因為中間沒有實際的數據修正。預測近期的,結果都很好,遠期的大部分不準確。看你數據這么多,你可以嘗試分步預測,比如每隔10個點,取一個數據,然後就可以預測基年後的第10個數據,依次類推。
㈧ 【神經網路時間序列】請教NAR網路預測問題,謝謝
NAR網路是只有y(t),NARX網路是有x(t)和y(t).
對於NAR網路來說,其只能夠輸出相對於延遲向量的下一個值。故需要用循環不斷更新集合,把時間步往前推進。
T=tonndata(force,false,false); %輸入和輸出矩陣須為cell類型的矩陣,且不能用num2cell來轉換,如果使用二維cell矩陣,將會被認為是兩個輸入從而不能訓練.假設force數據集只有50個(一行)。
force_raw=T(1:30); %創造一個1*30的Xi,與延遲向量1:30對應起來。為已知矩陣。
for j=1:50 %y1的前20個是對照著force裡面第31個到50個,加上可以預測後面30個數據。
y1(j)=net(T(10),force_raw); %這里還需要大神指教,T(10)裡面是當前矩陣,數字可以任意取,結果都一樣。只是為了輸出一維矩陣
force_raw=[force_raw(2:end),y1(j)]; %更新得到新的已知矩陣,為2,3~,30,31,下一步第一行應該是得到第43個。 不斷更新即可得到預測值。
㈨ 如何在python中用lstm網路進行時間序列預測
時間序列建模器 圖表那個選項卡 左下勾選 擬合值 就可以了。我的為什麼不出現預測值啊啊啊啊~~
㈩ 如何用神經網路進行時間序列預測
將時間序列拆開,組織訓練樣本。參考附件的例子,用的是BP神經網路。 BP(Back Propagation)神經網路是86年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hidden layer)和輸出層(output layer)。