### 準備數據:
* 將數據預處理為神經網絡可以處理的格式-向量化。
* 數據中的每個時間序列位于不同的范圍(比如溫度通道位于 -20 到 +30 之間,但氣壓大約在 1000 毫巴上下)
* 對每個時間序列分別做標準化,讓它們在相似的范圍內都取較小的值。
* 編寫一個 Python 生成器
* 以當前的浮點數數組作為輸入,并從最近的數據中生成數據批量,同時生成未來的目標溫度。
* 數據集中的樣本是高度冗余的(對于第*N*個樣本和第*N*+1 個樣本,大部分時間步都是相同的),所以顯式地保存每個樣本是一種浪費。相反,我們將使用原始數據即時生成樣本。
*****
### 合理性檢查:
* 嘗試一種**基于常識**的簡單**方法**。它可以**作為**合理性**檢查**
* **建立**一個**基準**,更高級的機器學習模型需要打敗這個基準才能表現出其**有效性**
*****
### 基于常識的、非機器學習的基準方法
嘗試機器學習方法之前,建立一個基于常識的基準方法是很有用的:
**小型的密集連接網絡**
~~~
model = Sequential()
model.add(layers.Flatten(input_shape=(lookback//step, float_data.shape[-1])))#首先將數據展平
model.add(layers.Dense(32, activation='relu'))#通過兩個Dense層并運行
model.add(layers.Dense(1))#最后一個Dense層沒有使用激活函數,這對于回歸問題是很常見的
model.compile(optimizer=RMSprop(), loss='mae')#使用 MAE 作為損失
history = model.fit_generator(train_gen,
steps_per_epoch=500,
epochs=20,
validation_data=val_gen,
validation_steps=val_steps)
~~~
### 使用循環 dropout 來降低過擬合
在循環網絡中使用 dropout 的正確方法:對每個時間步應該使用相同的 dropout 掩碼(dropout mask,相同模式的舍棄單元),而不是讓 dropout 掩碼隨著時間步的增加而隨機變化。此外,為了對`GRU`、`LSTM`等循環層得到的表示做正則化,應該將不隨時間變化的 dropout 掩碼應用于層的內部循環激活(叫作**循環**dropout 掩碼)。對每個時間步使用相同的 dropout 掩碼,可以讓網絡沿著時間正確地傳播其學習誤差,而隨時間隨機變化的 dropout 掩碼則會破壞這個誤差信號,并且不利于學習過程。
> 參見 Yarin Gal 的博士論文“Uncertainty in deep learning”。
Keras有兩個與 dropout 相關的參數:
* `dropout`它是一個浮點數,指定該層輸入單元的 dropout 比率
* `recurrent_dropout`指定循環單元的 dropout 比率
* 使用 dropout 正則化的網絡總是需要更長的時間才能完全收斂,所以網絡訓練輪次增加為原來的 2 倍
循環層堆疊:
* 增加網絡容量的通常做法是增加每層單元數或增加層數
* 在 Keras 中逐個堆疊循環層,所有中間層都應該返回完整的輸出序列(一個 3D 張量),而不是只返回最后一個時間步的輸出。這可以通過指定`return_sequences=True`來實現
~~~
model.add(layers.GRU(32,
dropout=0.1,
recurrent_dropout=0.5,
return_sequences=True,
input_shape=(None, float_data.shape[-1])))
model.add(layers.GRU(64, activation='relu',
dropout=0.1,
recurrent_dropout=0.5))
model.add(layers.Dense(1))
~~~
**雙向 RNN**(bidirectional RNN):
RNN 按時間逆序處理輸入序列(更晚的時間步在前)
* [ ] 編寫一個數據生成器的變體,將輸入序列沿著時間維度反轉(即將最后一行代碼替換為`yield samples[:, ::-1, :], targets`)
- 基礎
- 張量tensor
- 整數序列(列表)=>張量
- 張量運算
- 張量運算的幾何解釋
- 層:深度學習的基礎組件
- 模型:層構成的網絡
- 訓練循環 (training loop)
- 數據類型與層類型、keras
- Keras
- Keras 開發
- Keras使用本地數據
- fit、predict、evaluate
- K 折 交叉驗證
- 二分類問題-基于梯度的優化-訓練
- relu運算
- Dens
- 損失函數與優化器:配置學習過程的關鍵
- 損失-二分類問題
- 優化器
- 過擬合 (overfit)
- 改進
- 小結
- 多分類問題
- 回歸問題
- 章節小結
- 機械學習
- 訓練集、驗證集和測試集
- 三種經典的評估方法
- 模型評估
- 如何準備輸入數據和目標?
- 過擬合與欠擬合
- 減小網絡大小
- 添加權重正則化
- 添加 dropout 正則化
- 通用工作流程
- 計算機視覺
- 卷積神經網絡
- 卷積運算
- 卷積的工作原理
- 訓練一個卷積神經網絡
- 使用預訓練的卷積神經網絡
- VGG16
- VGG16詳細結構
- 為什么不微調整個卷積基?
- 卷積神經網絡的可視化
- 中間輸出(中間激活)
- 過濾器
- 熱力圖
- 文本和序列
- 處理文本數據
- n-gram
- one-hot 編碼 (one-hot encoding)
- 標記嵌入 (token embedding)
- 利用 Embedding 層學習詞嵌入
- 使用預訓練的詞嵌入
- 循環神經網絡
- 循環神經網絡的高級用法
- 溫度預測問題
- code
- 用卷積神經網絡處理序列
- GRU 層
- LSTM層
- 多輸入模型
- 回調函數
- ModelCheckpoint 與 EarlyStopping
- ReduceLROnPlateau
- 自定義回調函數
- TensorBoard_TensorFlow 的可視化框架
- 高級架構模式
- 殘差連接
- 批標準化
- 批再標準化
- 深度可分離卷積
- 超參數優化
- 模型集成
- LSTM
- DeepDream
- 神經風格遷移
- 變分自編碼器
- 生成式對抗網絡
- 術語表