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)
- 实现神经网络里的全连接层
具体内部实现的过程是:
output = activation(dot(input, kernel) + bias)
activation 是按逐个元素计算的激活函数
kernel 是由网络层创建的权值矩阵
bias 是其创建的偏置向量 (只在 use_bias 为 True 时才有用)。
- 参数
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)。
2 全连接层举例理解
全连接:把如下3x3x5的数据,转换成1x4096的形式。中间实现转换这个过程是一个卷积操作。
从下图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。
一般全连接层有两层或者两层以上,这是因为两层及以上可以很好地解决非线性问题,就是能根据多个不同因素去实现准确的分类。
3 使用
3.1 Demo 1
model = Sequential()
model.add(Dense(32, input_shape=(16,)))
#现在模型就会以尺寸为 (*, 16) 的数组作为输入,
#其输出数组的尺寸为 (*, 32)
#在第一层之后,你就不再需要指定输入的尺寸了:
model.add(Dense(32))
3.2 Demo 2
input_bits = Input(shape=(256,))
temp = BatchNormalization()(input_bits)#批量标准化,又叫纵向规范化
temp = Dense(512, activation='relu')(input_bits)#relu激活函数,512是神经元个数
temp = BatchNormalization()(temp)
temp = Dense(256, activation='relu')(temp)
temp = BatchNormalization()(temp)
temp = Dense(128, activation='relu')(temp)
temp = BatchNormalization()(temp)
out_put = Dense(64, activation='sigmoid')(temp)
model = Model(input_bits, out_put)
model.compile(optimizer='adam', loss='mse', metrics=[bit_err])
model.summary()