深度神经网络原理及其应用
图1为深度神经网络(DNN)的示意图。如图所示,该网络一共有三层,分别是输入层、隐藏层和输出层。其中,输入层为输入神经网络的数据,每个隐藏层由一定的神经元组成,输出层是神经网络最终的输出。
图1 DNN网络示意图
对于神经网络的第k-1层和k层而言,k-1层的任意一个神经元,都和第k层所有节点相连,即第k层的每个神经元由第k-1层加权求和得到。设
为DNN网络的第k-1层的输出矢量。
因此第k层神经网络上每一个神经元的输出为
其中,Wk和bk分别为第k层隐藏层的权重矩阵和偏置矢量,故第k层隐藏层的输出为
采用Tanh激活函数,其表达式为
因此,整个神经网络的输出为输入的数据的非线性变换的级联,其数学表达式为
其中,L表示神经网络的网络层数,θ表示学习网络中的所有参数。模型的参数是神经元的权重和偏置,这些参数通过随机初始化,然后通过训练学习不断更新。
实例
/ CASE
采用全连接层来搭建DenseNet。首先,原始的样本数据是28×28的灰度值图像。对其做数据的预处理,使其重整为784×1的0-1的实值向量。接着将其通过两个全连接层,输出维度分别为512,10。激活函数分别采用ReLu和Softmax。输出为10×1的概率值向量。
图2 DenseNet网络结构
网络训练部分,batch size,epochs和学习率分别设置为128,10,0.0001。计算机配置:CPU intel i7-100875H,GPU RTX 2060。训练结果如下:
图3 损失和准确率曲线
代码如下:
from tensorflow.keras.datasets import mnist from tensorflow.keras import layers from tensorflow.keras import models from tensorflow.keras.utils import to_categorical import matplotlib.pyplot as plt # 数据处理 (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28 * 28)) test_images = test_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) # 网络搭建 network = models.Sequential() network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) network.add(layers.Dense(10, activation='softmax')) network.summary() network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 结果图 history = network.fit(train_images, train_labels, epochs=10, batch_size=128) test_loss, test_acc = network.evaluate(test_images, test_labels) history_dict = history.history loss_values = history_dict['loss'] accuracy = history_dict['accuracy'] epochs = range(1, len(loss_values) + 1) plt.plot(epochs, loss_values, 'bo', label='Training loss') plt.plot(epochs, accuracy, 'b', label='accuracy') plt.title('Loss and Accuracy') plt.xlabel('Epochs') plt.ylabel('Loss/Accuracy') plt.legend() plt.show() |
END
扫描二维码
获取更多精彩
WCTL@CQU