keras的網絡層

import tensorflow as tf
from tensorflow.keras import layers
print(tf.__version__)
print(tf.keras.__version__)
2.0.0-beta0
2.2.4-tf

1. Keras 的 layer 中共同的 methods:

  • layer.get_weights(): returns the weights of the layer as a list of Numpy arrays.返回層的權重(以含有Numpy矩陣的列表形式)。
  • layer.set_weights(weights): sets the weights of the layer from a list of Numpy arrays(與get_weights的輸出形狀相同)。
  • layer.get_config(): 返回包含層配置的字典。The layer can be reinstantiated from its config via:
layer = Dense(32)
config = layer.get_config()
reconstructed_layer = Dense.from_config(config)
或者  
from keras import layers

config = layer.get_config()
layer = layers.deserialize({'class_name': layer.__class__.__name__,'config': config})
  • 當一個layer只有單個node(i.e. if it isn’t a shared layer),可以得到它的輸入張量、輸出張量、輸入尺寸和輸出尺寸:
    • layer.input
    • layer.output
    • layer.input_shape
    • layer.output_shape
  • 當一個layer有多個node(see: the concept of layer node and shared layers),有如下函數可以使用:
    • layer.get_input_at(node_index)
    • layer.get_output_at(node_index)
    • layer.get_input_shape_at(node_index)
    • layer.get_output_shape_at(node_index)

2. 全連接層Dense 和 激活層Activation

2.1 全連接層Dense

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

參數:

  • 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)。

全連接層實現如下操作:
output = activation(dot(input, kernel) + bias)
其中kernel是由網絡層創建的權值矩陣,dot即點乘的意思,以及 bias 是其創建的偏置向量 (只在 use_bias 爲 True 時纔有用)。

2.2 激活層Activation

keras.layers.Activation(activation)

參數:
activation: 要使用的激活函數的名稱

3. Convolutional Layers 卷積層

3.1 1D convolution layer(eg: 時序卷積)

keras.layers.Conv1D(filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

參數:

  • filters: 整數,輸出空間的維度 (即卷積中濾波器的輸出數量)。
  • kernel_size: 一個整數,或者單個整數表示的元組或列表, 指明 1D 卷積窗口的長度。
  • strides: 一個整數,或者單個整數表示的元組或列表, 指明卷積的步長。 指定任何 stride 值 != 1 與指定 dilation_rate 值 != 1 兩者不兼容。
  • padding: “valid”, “causal” 或 “same” 之一 (大小寫敏感) “valid” 表示「不填充」。 “same” 表示填充輸入以使輸出具有與原始輸入相同的長度。 “causal” 表示因果(膨脹)卷積, 例如,output[t] 不依賴於 input[t+1:], 在模型不應違反時間順序的時間數據建模時非常有用。 詳見 WaveNet: A Generative Model for Raw Audio, section 2.1。
  • data_format: 字符串, “channels_last” (默認) 或 “channels_first” 之一。輸入的各個維度順序。 “channels_last” 對應輸入尺寸爲 (batch, steps, channels) (Keras 中時序數據的默認格式) 而 “channels_first” 對應輸入尺寸爲 (batch, channels, steps)。
  • dilation_rate: 一個整數,或者單個整數表示的元組或列表,指定用於膨脹卷積的膨脹率。 當前,指定任何 dilation_rate 值 != 1 與指定 stride 值 != 1 兩者不兼容。
  • activation: 要使用的激活函數 (詳見 activations)。 如未指定,則不使用激活函數 (即線性激活: a(x) = x)。
  • use_bias: 布爾值,該層是否使用偏置向量。
  • kernel_initializer: kernel 權值矩陣的初始化器 (詳見 initializers)。
  • bias_initializer: 偏置向量的初始化器 (詳見 initializers)。
  • kernel_regularizer: 運用到 kernel 權值矩陣的正則化函數 (詳見 regularizer)。
  • bias_regularizer: 運用到偏置向量的正則化函數 (詳見 regularizer)。
  • activity_regularizer: 運用到層輸出(它的激活值)的正則化函數 (詳見 regularizer)。
  • kernel_constraint: 運用到 kernel 權值矩陣的約束函數 (詳見 constraints)。
  • bias_constraint: 運用到偏置向量的約束函數 (詳見 constraints)。

輸入尺寸:
3D 張量 ,尺寸爲 (batch_size, steps, input_dim)。

輸出尺寸:
3D 張量,尺寸爲 (batch_size, new_steps, filters)。 由於填充或窗口按步長滑動,steps 值可能已更改。

3.2 2D convolution layer (e.g. spatial convolution over images)

keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

參數:

  • filters: 整數,輸出空間的維度 (即卷積中濾波器的輸出數量)。
  • kernel_size: 一個整數,或者 2 個整數表示的元組或列表, 指明 2D 卷積窗口的寬度和高度。 可以是一個整數,爲所有空間維度指定相同的值。
  • strides: 一個整數,或者 2 個整數表示的元組或列表, 指明卷積沿寬度和高度方向的步長。 可以是一個整數,爲所有空間維度指定相同的值。 指定任何 stride 值 != 1 與指定 dilation_rate 值 != 1 兩者不兼容。
  • padding: “valid” 或 “same” (大小寫敏感)。
  • data_format: 字符串, channels_last (默認) 或 channels_first 之一,表示輸入中維度的順序。 channels_last 對應輸入尺寸爲 (batch, height, width, channels), channels_first 對應輸入尺寸爲 (batch, channels, height, width)。 它默認爲從 Keras 配置文件 ~/.keras/keras.json 中 找到的 image_data_format 值。 如果你從未設置它,將使用 channels_last。
  • dilation_rate: 一個整數或 2 個整數的元組或列表, 指定膨脹卷積的膨脹率。 可以是一個整數,爲所有空間維度指定相同的值。 當前,指定任何 dilation_rate 值 != 1 與 指定 stride 值 != 1 兩者不兼容。
  • activation: 要使用的激活函數 (詳見 activations)。 如果你不指定,則不使用激活函數 (即線性激活: a(x) = x)。
  • use_bias: 布爾值,該層是否使用偏置向量。
  • kernel_initializer: kernel 權值矩陣的初始化器 (詳見 initializers)。
  • bias_initializer: 偏置向量的初始化器 (詳見 initializers)。
  • kernel_regularizer: 運用到 kernel 權值矩陣的正則化函數 (詳見 regularizer)。
  • bias_regularizer: 運用到偏置向量的正則化函數 (詳見 regularizer)。
  • activity_regularizer: 運用到層輸出(它的激活值)的正則化函數 (詳見 regularizer)。
  • kernel_constraint: 運用到 kernel 權值矩陣的約束函數 (詳見 constraints)。
  • bias_constraint: 運用到偏置向量的約束函數 (詳見 constraints)。

輸入尺寸:
如果 data_format=‘channels_first’, 輸入 4D 張量,尺寸爲 (samples, channels, rows, cols)。
如果 data_format=‘channels_last’, 輸入 4D 張量,尺寸爲 (samples, rows, cols, channels)。

輸出尺寸:
如果 data_format=‘channels_first’, 輸出 4D 張量,尺寸爲 (samples, filters, new_rows, new_cols)。
如果 data_format=‘channels_last’, 輸出 4D 張量,尺寸爲 (samples, new_rows, new_cols, filters)。

4. Pooling Layers 池化層

4.1 MaxPooling1D: 對於時序數據的最大池化。

keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid', data_format='channels_last')

參數:

  • pool_size: 整數,最大池化的窗口大小。
  • strides: 整數,或者是 None。作爲縮小比例的因數。 例如,2 會使得輸入張量縮小一半。 如果是 None,那麼默認值是 pool_size。
  • padding: “valid” 或者 “same” (區分大小寫)。
  • data_format: 字符串,channels_last (默認)或 channels_first 之一。 表示輸入各維度的順序。 channels_last 對應輸入尺寸爲 (batch, steps, features), channels_first 對應輸入尺寸爲 (batch, features, steps)。

輸入尺寸:
如果 data_format=‘channels_last’, 輸入爲 3D 張量,尺寸爲: (batch_size, steps, features)
如果data_format=‘channels_first’, 輸入爲 3D 張量,尺寸爲: (batch_size, features, steps)

輸出尺寸:
如果 data_format=‘channels_last’, 輸出爲 3D 張量,尺寸爲: (batch_size, downsampled_steps, features)
如果 data_format=‘channels_first’, 輸出爲 3D 張量,尺寸爲: (batch_size, features, downsampled_steps)

4.2 MaxPooling2D:對於空間數據的最大池化。

keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)

參數:

  • pool_size: 整數,或者 2 個整數表示的元組, 沿(垂直,水平)方向縮小比例的因數。 (2,2)會把輸入張量的兩個維度都縮小一半。 如果只使用一個整數,那麼兩個維度都會使用同樣的窗口長度。
  • strides: 整數,2 個整數表示的元組,或者是 None。 表示步長值。 如果是 None,那麼默認值是 pool_size。
  • padding: “valid” 或者 “same” (區分大小寫)。
  • data_format: 字符串,channels_last (默認)或 channels_first 之一。 表示輸入各維度的順序。 channels_last 代表尺寸是 (batch, height, width, channels) 的輸入張量, 而 channels_first 代表尺寸是 (batch, channels, height, width) 的輸入張量。 默認值根據 Keras 配置文件 ~/.keras/keras.json 中的 image_data_format 值來設置。 如果還沒有設置過,那麼默認值就是 “channels_last”。

輸入尺寸:
如果 data_format=‘channels_last’: 尺寸是 (batch_size, rows, cols, channels) 的 4D 張量
如果 data_format=‘channels_first’: 尺寸是 (batch_size, channels, rows, cols) 的 4D 張量

輸出尺寸:
如果 data_format=‘channels_last’: 尺寸是 (batch_size, pooled_rows, pooled_cols, channels) 的 4D 張量
如果 data_format=‘channels_first’: 尺寸是 (batch_size, channels, pooled_rows, pooled_cols) 的 4D 張量

5. Keras快速入門

# 構建簡單模型
model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
print(model)
<tensorflow.python.keras.engine.sequential.Sequential object at 0x000001F49F7542B0>
# 調用 compile 方法配置該模型的學習流程:
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
             loss=tf.keras.losses.categorical_crossentropy,
             metrics=[tf.keras.metrics.categorical_accuracy])
# 輸入數據
import numpy as np

train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))

val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))

model.fit(train_x, train_y, epochs=10, batch_size=100,
          validation_data=(val_x, val_y))

dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y))
dataset = dataset.batch(32)
dataset = dataset.repeat()
val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y))
val_dataset = val_dataset.batch(32)
val_dataset = val_dataset.repeat()

model.fit(dataset, epochs=10, steps_per_epoch=30,
          validation_data=val_dataset, validation_steps=3)
Train on 1000 samples, validate on 200 samples
Epoch 1/10
1000/1000 [==============================] - 0s 39us/sample - loss: 11.5461 - categorical_accuracy: 0.1100 - val_loss: 11.6212 - val_categorical_accuracy: 0.1200
Epoch 2/10
1000/1000 [==============================] - 0s 57us/sample - loss: 11.5429 - categorical_accuracy: 0.1120 - val_loss: 11.6203 - val_categorical_accuracy: 0.1150
Epoch 3/10
1000/1000 [==============================] - 0s 92us/sample - loss: 11.5407 - categorical_accuracy: 0.1140 - val_loss: 11.6200 - val_categorical_accuracy: 0.1100
Epoch 4/10
1000/1000 [==============================] - 0s 98us/sample - loss: 11.5392 - categorical_accuracy: 0.1110 - val_loss: 11.6192 - val_categorical_accuracy: 0.1000
Epoch 5/10
1000/1000 [==============================] - 0s 48us/sample - loss: 11.5371 - categorical_accuracy: 0.1130 - val_loss: 11.6202 - val_categorical_accuracy: 0.1000
Epoch 6/10
1000/1000 [==============================] - 0s 47us/sample - loss: 11.5356 - categorical_accuracy: 0.1010 - val_loss: 11.6205 - val_categorical_accuracy: 0.1050
Epoch 7/10
1000/1000 [==============================] - 0s 33us/sample - loss: 11.5343 - categorical_accuracy: 0.1130 - val_loss: 11.6205 - val_categorical_accuracy: 0.0900
Epoch 8/10
1000/1000 [==============================] - ETA: 0s - loss: 11.2730 - categorical_accuracy: 0.130 - 0s 59us/sample - loss: 11.5332 - categorical_accuracy: 0.1170 - val_loss: 11.6197 - val_categorical_accuracy: 0.0950
Epoch 9/10
1000/1000 [==============================] - 0s 43us/sample - loss: 11.5317 - categorical_accuracy: 0.1170 - val_loss: 11.6205 - val_categorical_accuracy: 0.0900
Epoch 10/10
1000/1000 [==============================] - 0s 47us/sample - loss: 11.5306 - categorical_accuracy: 0.1140 - val_loss: 11.6209 - val_categorical_accuracy: 0.1000


W0613 21:46:52.747749 20120 training_utils.py:1436] Expected a shuffled dataset but input dataset `x` is not shuffled. Please invoke `shuffle()` on input dataset.


Epoch 1/10
30/30 [==============================] - 0s 10ms/step - loss: 11.5338 - categorical_accuracy: 0.1156 - val_loss: 11.5274 - val_categorical_accuracy: 0.1146
Epoch 2/10
30/30 [==============================] - 0s 11ms/step - loss: 11.5332 - categorical_accuracy: 0.1154 - val_loss: 11.5297 - val_categorical_accuracy: 0.1146
Epoch 3/10
30/30 [==============================] - 0s 6ms/step - loss: 11.5629 - categorical_accuracy: 0.1218 - val_loss: 11.5348 - val_categorical_accuracy: 0.1042
Epoch 4/10
30/30 [==============================] - 0s 7ms/step - loss: 11.5302 - categorical_accuracy: 0.1207 - val_loss: 11.5347 - val_categorical_accuracy: 0.1042
Epoch 5/10
30/30 [==============================] - 0s 7ms/step - loss: 11.5041 - categorical_accuracy: 0.1442 - val_loss: 11.5363 - val_categorical_accuracy: 0.0833
Epoch 6/10
30/30 [==============================] - 0s 6ms/step - loss: 11.4904 - categorical_accuracy: 0.1453 - val_loss: 11.5369 - val_categorical_accuracy: 0.0729
Epoch 7/10
30/30 [==============================] - 0s 4ms/step - loss: 11.5032 - categorical_accuracy: 0.1442 - val_loss: 11.5365 - val_categorical_accuracy: 0.0833
Epoch 8/10
30/30 [==============================] - 0s 5ms/step - loss: 11.5057 - categorical_accuracy: 0.1293 - val_loss: 11.5383 - val_categorical_accuracy: 0.0521
Epoch 9/10
30/30 [==============================] - 0s 8ms/step - loss: 11.4728 - categorical_accuracy: 0.1368 - val_loss: 11.5383 - val_categorical_accuracy: 0.0625
Epoch 10/10
30/30 [==============================] - 0s 7ms/step - loss: 11.4725 - categorical_accuracy: 0.1432 - val_loss: 11.5452 - val_categorical_accuracy: 0.0625





<tensorflow.python.keras.callbacks.History at 0x1f49f73d898>
# 評估與預測
test_x = np.random.random((1000, 72))
test_y = np.random.random((1000, 10))
model.evaluate(test_x, test_y, batch_size=32)
test_data = tf.data.Dataset.from_tensor_slices((test_x, test_y))
test_data = test_data.batch(32).repeat()
model.evaluate(test_data, steps=30)
# predict
result = model.predict(test_x, batch_size=32)
print(result)
1000/1000 [==============================] - 0s 78us/sample - loss: 11.3523 - categorical_accuracy: 0.0860
30/30 [==============================] - 0s 3ms/step - loss: 11.3579 - categorical_accuracy: 0.0854
[[0.11881605 0.08954418 0.10049648 ... 0.08149438 0.08897649 0.07803077]
 [0.10026202 0.11154279 0.09660741 ... 0.09932677 0.10722913 0.10462242]
 [0.09840129 0.10786825 0.09965912 ... 0.11311305 0.08366519 0.10692449]
 ...
 [0.10567487 0.09954583 0.09972969 ... 0.09445976 0.09508321 0.0991546 ]
 [0.09587354 0.11076774 0.09700563 ... 0.10748769 0.09515158 0.11452723]
 [0.10443144 0.09577551 0.10727009 ... 0.09245645 0.09657421 0.09224707]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章