Keras – 密集层

Keras – 密集层

密集层 是常规的深度连接神经网络层。它是最常见和最经常使用的层。密集层对输入进行以下操作并返回输出。

output = activation(dot(input, kernel) + bias)

其中、

  • 输入 代表输入数据

  • kernel 代表权重数据

  • dot 代表所有输入和其对应的权重的numpy点积

  • bias 代表机器学习中用于优化模型的偏置值

  • activation 代表激活函数。

让我们考虑以下的输入和权重样本,并尝试找到结果。

  • 输入为2 x 2矩阵 [[1, 2], [3, 4] ] 。

  • 内核为2 x 2矩阵 [[0.5, 0.75], [0.25, 0.5] ]

  • 偏置值为 0

  • 激活为 线性。 正如我们前面所学,线性激活没有任何作用。

>>> import numpy as np 

>>> input = [ [1, 2], [3, 4] ] 
>>> kernel = [ [0.5, 0.75], [0.25, 0.5] ] 
>>> result = np.dot(input, kernel) 
>>> result array([[1. , 1.75], [2.5 , 4.25]])
>>>

结果 是输出,它将被传递到下一个层。

密集层的输出形状将受到密集层中指定的神经元/单元数量的影响。例如,如果输入形状是 ( 8 ,) ,单元数是16,那么输出形状就是 (16,)。 所有的层都将以批量大小为第一维度,因此,输入形状将以 (None,8) 表示,输出形状为 (None,16)。 目前,批量大小是无,因为它没有被设置。批量大小通常在训练阶段设置。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 

>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.input_shape 
(None, 8) 
>>> layer_1.output_shape 
(None, 16)
>>>

其中、

  • layer_1.input_shape 返回该层的输入形状。

  • layer_1.output_shape 返回该层的输出形状。

密集层 支持的参数如下

  • units 代表单元的数量,它影响到输出层。

  • activation 代表激活函数。

  • use_bias 表示该层是否使用偏置矢量。

  • kernel_initializer 表示用于内核的初始化器。

  • bias_initializer 表示用于偏置向量的初始化器。

  • kernel_regularizer 表示应用于kernel权重矩阵的正则函数。

  • bias_regularizer 表示应用于偏置向量的正则函数。

  • activity_regularizer 表示应用于该层输出的正则函数。

  • kernel_constraint 表示应用于kernel权重矩阵的约束函数。

  • bias_constraint 代表应用于偏置向量的约束函数。

正如你所看到的,没有一个参数可以用来指定输入数据的 input_shapeinput_shape 是一个特殊的参数,只有当它被设计为模型中的第一层时,层才会接受这个参数。

此外,所有的Keras层都有一些共同的方法,它们如下: 1.

get_weights

获取该层中使用的权重的完整列表。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 
>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.get_weights() 
>>> [array([[-0.19929028, 0.4162618 , 0.20081699,  
   -0.25589502, 0.3612864 , 0.25088787, -0.47544873, 0.0321095 , 
   -0.26070702, -0.24102116, 0.32778358, 0.4667952 , -0.43322265, 
   -0.14500427, 0.04341269, -0.34929228], [ 0.41898954, 0.42256463, 
   0.2399621 , -0.272717 , -0.37069297, -0.37802136, 0.11428618, 0.12749982, 
   0.10182762, 0.14897704, 0.06569374, 0.15424263, 0.42638576, 0.34037888, -0.15504825, 
   -0.0740819 ], [-0.3132702 , 0.34885168, -0.3259498 , -0.47076607, 0.33696914, 
   -0.49143505, -0.04318619, -0.11252558, 0.29669464, -0.28431225, -0.43165374, 
   -0.49687648, 0.13632 , -0.21099591, -0.10608876, -0.13568914], [-0.27421212, 
   -0.180812 , 0.37240648,  0.25100648, -0.07199466, -0.23680925, -0.21271884, 
   -0.08706653, 0.4393121 , 0.23259485, 0.2616762 , 0.23966897, -0.4502542 , 0.0058881 
   , 0.14847124, 0.08835125], [-0.36905527, 0.08948278, -0.19254792, 0.26783705, 
   0.25979865, -0.46963632, 0.32761025, -0.25718856, 0.48987913, 0.3588251 , 
   -0.06586111, 0.2591269 , 0.48289275, 0.3368858 , -0.17145419, -0.35674667], 
   [-0.32851398, 0.42289603, -0.47025883, 0.29027188, -0.0498147 , 0.46215963, 
   -0.10123312, 0.23069787, 0.00844061, -0.11867595, -0.2602347 , 
   -0.27917898, 0.22910392, 0.18214619, -0.40857887, 0.2606709 ], [-0.19066167, 
   -0.11464512, -0.06768692, -0.21878994, -0.2573272 , 0.13698077, 0.45221198, 
   0.10634196, 0.06784797, 0.07192957, 0.2946936 , 
   0.04968262, -0.15899467, 0.15757453, -0.1343019 , 0.24561536], [-0.04272163, 
   0.48315823, -0.13382411, 0.01752126, -0.1630218 , 0.4629662 , -0.21412933, 
   -0.1445911 , -0.03567278, -0.20948446, 0.15742278, 0.11139905, 0.11066687, 
   0.17430818, 0.36413217, 0.19864106]], dtype=float32), array([0., 0., 0., 0., 0., 0., 
   0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype = float32)]
>>>
  • set_weights – 设置该层的权重。

  • get_config – 获取该层的完整配置,作为一个对象,可以在任何时候重新加载。

config = layer_1.get_config()

from_config

从该层的配置对象中加载该层。

config = layer_1.get_config() reload_layer = Dense.from_config(config)

输入形状(input_shape)

获取输入形状,如果该层只有一个节点。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 
>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.get_weights() 
>>> layer_1.input_shape 
(None, 8)

输入

获取输入数据,如果该层只有一个节点。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 
>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.get_weights() 
>>> layer_1.input 
<tf.Tensor 'dense_1_input:0' shape = (?, 8) dtype = float32>
  • get_input_at – 如果该层有多个节点,在指定的索引处获取输入数据。

  • get_input_shape_at – 如果该层有多个节点,在指定的索引处获取输入形状。

  • output_shape – 如果该层只有一个节点,则获取输出形状。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 
>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.get_weights()
>>> layer_1.output_shape (None, 16)

输出

获取输出数据,如果该层只有一个节点。

>>> from keras.models import Sequential 
>>> from keras.layers import Activation, Dense 
>>> model = Sequential() 
>>> layer_1 = Dense(16, input_shape = (8,)) 
>>> model.add(layer_1) 
>>> layer_1.get_weights() 
>>> layer_1.output 
<tf.Tensor 'dense_1/BiasAdd:0' shape = (?, 16) dtype = float32>
  • get_output_at – 如果该层有多个节点,在指定的索引处获取输出数据。

  • get_output_shape at -_ 如果该层有多个节点,则在指定的索引处获取输出形状。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程