結合 cnn 和 rnn 來處理長序列
運用一維卷積與迴圈層對文字進行學習,這裡我們依然拿耶拿的天氣資料進行舉例。
import os
data_dir =
'c:\\users\\administrator\\desktop\\keras_learn\\jena_climate'
fname = os.path.join(data_dir,
'jena_climate_2009_2016.csv'
)f =
open
(fname,encoding=
'utf-8'
)data = f.read(
)f.close(
)lines = data.split(
'\n'
)header = lines[0]
.split(
',')
#csv檔案
lines = lines[1:
]import numpy as np
float_data = np.zeros(
(len
(lines)
,len
(header)-1
))#第乙個元素是記錄的時間,不是學習的內容
for i,line in
enumerate
(lines)
: values =
[float
(x)for x in line.split(
',')[1
:]] float_data[i,:]
= values
mean = float_data[
:200000
].mean(axis=0)
float_data -= mean
std = float_data[
:200000
].std(axis=0)
float_data /= std
defgenerator
(data, lookback, delay, min_index, max_index,
shuffle=
false
, batch_size=
128, step=6)
:if max_index is
none
: max_index =
len(data)
- delay -
1 i = min_index + lookback
while1:
if shuffle:
rows = np.random.randint(
min_index + lookback, max_index, size=batch_size)
else
:if i + batch_size >= max_index:
i = min_index + lookback
rows = np.arange(i,
min(i + batch_size, max_index)
) i +=
len(rows)
samples = np.zeros(
(len
(rows)
, lookback // step,
data.shape[-1
])) targets = np.zeros(
(len
(rows),)
)for j, row in
enumerate
(rows)
: indices =
range
(rows[j]
- lookback, rows[j]
, step)
samples[j]
= data[indices]
targets[j]
= data[rows[j]
+ delay][1
]#目標選取隔一天的溫度
yield samples, targets
lookback =
1440
#10天
step =
3delay =
144#1天
batch_size =
128train_gen = generator(float_data,
lookback=lookback,
delay=delay,
min_index=0,
max_index=
200000
, shuffle=
true
, step=step,
batch_size=batch_size)
val_gen = generator(float_data,
lookback=lookback,
delay=delay,
min_index=
200001
, max_index=
300000
, step=step,
batch_size=batch_size)
test_gen = generator(float_data,
lookback=lookback,
delay=delay,
min_index=
300001
, max_index=
none
, step=step,
batch_size=batch_size)
val_steps =
(300000
-200001
- lookback)
// batch_size
#類似與卷積層經過卷積核後的大小計算公式
test_steps =
(len
(float_data)
-300001
- lookback)
// batch_size
在前面幾節提到過,如不理解可以翻到之前學習筆記檢視。
特別注意,以上**中我將step從6改為3,這意味著從每乙個小時提取一次資料改為每半個小時,其目的是為了更好的學習。
從驗證損失來看,這種架構的效果不如只用正則化 gru,但速度要快很多。它檢視了兩倍的資料量,在本例中可能不是非常有用,但對於其他資料集可能非常重要。
Python學習筆記(十)
mylab 專案實戰 1 在templates中乙個index.html我需要引入當前資料夾中的另乙個網頁,我直接在index的 中引入 html無效 最後,我在這個專案的主目錄下的urls中進行設定,可行 2 在呼叫網頁的時候,進行views設定,就已經把處理函式給選定了 直接在views,用re...
python學習筆記十
字典遍歷 集合函式 copy僅拷貝物件本身,而不對中的子物件進行拷貝,故對子物件進行修改也會隨著修改。dict1 dict2 dict1 dict3 dict1.copy dict1 user root dict1 num remove 1 print dict1 print dict2 print...
Python深度學習 學習筆記(十三)
上一節,我們提到了rnn已經rnn在keras中最簡單的層 rnn。但 rnn由於過於簡化,沒有實用價值。實際上,它不可以學到長期依賴。原因在於梯度消失問題,當運用比較多的非迴圈層時,而讓網變得無法訓練。同樣的問題其實也普遍發生在密集連線層。今天介紹的lstm long short term mem...