論文:《Neural Collaborative Filtering》源碼中用到的模塊(函數)
from keras.layers import Embedding, Input, Dense, merge, Reshape, Merge, Flatten
?
(1)Input():用于實例化?Keras 張量
keras.engine.input_layer.Input()
參數:
- shape: 一個尺寸元組(整數),不包含批量大小。 例如,shape=(32,)?表明期望的輸入是按批次的 32 維向量。
- batch_shape: 一個尺寸元組(整數),包含批量大小。 例如,batch_shape=(10, 32)表明期望的輸入是 10 個 32 維向量。?batch_shape=(None, 32)?表明任意批次大小的 32 維向量。
- name: 一個可選的層的名稱的字符串。 在一個模型中應該是唯一的(不可以重用一個名字兩次)。 如未提供,將自動生成。
- dtype: 輸入所期望的數據類型,字符串表示 (float32,?float64,?int32...)
- sparse: 一個布爾值,指明需要創建的占位符是否是稀疏的。
- tensor: 可選的可封裝到?Input?層的現有張量。 如果設定了,那么這個層將不會創建占位符張量。
返回:一個張量。
(2)Embedding(): 將正整數(索引值)轉換為固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]。 該層只能用作模型中的第一層。
參數:
- input_dim: int > 0。詞匯表大小, 即,最大整數 index + 1。
- output_dim: int >= 0。詞向量的維度。
- embeddings_initializer:?embeddings?矩陣的初始化方法 (詳見?initializers)。
- embeddings_regularizer:?embeddings?matrix 的正則化方法 (詳見?regularizer)。
- embeddings_constraint:?embeddings?matrix 的約束函數 (詳見?constraints)。
- mask_zero: 是否把 0 看作為一個應該被遮蔽的特殊的 "padding" 值。 這對于可變長的?循環神經網絡層?十分有用。 如果設定為?True,那么接下來的所有層都必須支持 masking,否則就會拋出異常。 如果 mask_zero 為?True,作為結果,索引 0 就不能被用于詞匯表中 (input_dim 應該與 vocabulary + 1 大小相同)。
- input_length: 輸入序列的長度,當它是固定的時。 如果你需要連接?Flatten?和?Dense?層,則這個參數是必須的 (沒有它,dense 層的輸出尺寸就無法計算)。
輸入尺寸: 尺寸為?(batch_size, sequence_length)?的 2D 張量。
輸出尺寸: 尺寸為?(batch_size, sequence_length, output_dim)?的 3D 張量。
(3)Flatten(): 將輸入展平。不影響批量大小。
參數
- data_format:一個字符串,其值為?channels_last(默認值)或者?channels_first。它表明輸入的維度的順序。此參數的目的是當模型從一種數據格式切換到另一種數據格式時保留權重順序。channels_last?對應著尺寸為?(batch, ..., channels)?的輸入,而?channels_first?對應著尺寸為?(batch, channels, ...)?的輸入。默認為?image_data_format?的值,你可以在 Keras 的配置文件?~/.keras/keras.json?中找到它。如果你從未設置過它,那么它將是?channels_last
(4)Dense(): 就是常用的全連接層。
Dense?實現以下操作:?output = activation(dot(input, kernel) + bias)?其中?activation?是按逐個元素計算的激活函數,kernel是由網絡層創建的權值矩陣,以及?bias?是其創建的偏置向量 (只在?use_bias?為?True?時才有用)。
- 注意: 如果該層的輸入的秩大于2,那么它首先被展平然后 再計算與?kernel?的點乘。
參數
- units: 正整數,輸出空間維度。
- activation: 激活函數 (詳見?activations)。 若不指定,則不使用激活函數 (即,「線性」激活:?a(x) = x)。
- use_bias: 布爾值,該層是否使用偏置向量。
- kernel_initializer:?kernel?權值矩陣的初始化器 (詳見?initializers)。
- bias_initializer: 偏置向量的初始化器 (see?initializers).
- kernel_regularizer: 運用到?kernel?權值矩陣的正則化函數 (詳見?regularizer)。
- bias_regularizer: 運用到偏置向的的正則化函數 (詳見?regularizer)。
- activity_regularizer: 運用到層的輸出的正則化函數 (它的 "activation")。 (詳見?regularizer)。
- kernel_constraint: 運用到?kernel?權值矩陣的約束函數 (詳見?constraints)。
- bias_constraint: 運用到偏置向量的約束函數 (詳見?constraints)。
輸入尺寸:? nD 張量,尺寸:?(batch_size, ..., input_dim)。 最常見的情況是一個尺寸為?(batch_size, input_dim)?的 2D 輸入。
輸出尺寸: nD 張量,尺寸:?(batch_size, ..., units)。 例如,對于尺寸為?(batch_size, input_dim)?的 2D 輸入, 輸出的尺寸為?(batch_size, units)。
(5)compile():用于配置訓練模型
compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
參數:
- optimizer: 字符串(優化器名)或者優化器實例。 詳見?optimizers。
- loss: 字符串(目標函數名)或目標函數。 詳見?losses。 如果模型具有多個輸出,則可以通過傳遞損失函數的字典或列表,在每個輸出上使用不同的損失。 模型將最小化的損失值將是所有單個損失的總和。
- metrics: 在訓練和測試期間的模型評估標準。 通常你會使用?metrics = ['accuracy']。 要為多輸出模型的不同輸出指定不同的評估標準, 還可以傳遞一個字典,如?metrics = {'output_a':'accuracy'}。
- loss_weights: 可選的指定標量系數(Python 浮點數)的列表或字典, 用以衡量損失函數對不同的模型輸出的貢獻。 模型將最小化的誤差值是由?loss_weights?系數加權的加權總和誤差。 如果是列表,那么它應該是與模型輸出相對應的 1:1 映射。 如果是張量,那么應該把輸出的名稱(字符串)映到標量系數。
- sample_weight_mode: 如果你需要執行按時間步采樣權重(2D 權重),請將其設置為?temporal。 默認為?None,為采樣權重(1D)。 如果模型有多個輸出,則可以通過傳遞 mode 的字典或列表,以在每個輸出上使用不同的?sample_weight_mode。
- weighted_metrics: 在訓練和測試期間,由 sample_weight 或 class_weight 評估和加權的度量標準列表。
- target_tensors: 默認情況下,Keras 將為模型的目標創建一個占位符,在訓練過程中將使用目標數據。 相反,如果你想使用自己的目標張量(反過來說,Keras 在訓練期間不會載入這些目標張量的外部 Numpy 數據), 您可以通過?target_tensors?參數指定它們。 它可以是單個張量(單輸出模型),張量列表,或一個映射輸出名稱到目標張量的字典。
- **kwargs: 當使用 Theano/CNTK 后端時,這些參數被傳入?K.function。 當使用 TensorFlow 后端時,這些參數被傳遞到?tf.Session.run。
?
?
?
【Reference】
1、Docs??Layers ?核心網絡層:?https://keras.io/zh/layers/core/
2、Docs??模型 ?函數式 API:https://keras.io/zh/models/model/#compile?