智能计算系统实验2

实验2.1:基于三层神经网络实现手写数字识别

实验目的

  1. 实现三层神经网络模型进行手写数字分类,建立一个简单而完整的神经网络工程。通过本实验理解神经网络中基本模块的作用和模块间的关系,为后续建立更复杂的神经网络实验(如风格迁移)奠定基础。
  2. 利用高级编程语言Python实现神经网络基本单元的前向传播(正向传播)和反向传播计算,加深对神经网络中基本单元的理解,包括全连接层、激活函数、损失函数等基本单元。
  3. 利用高级编程语言Python实现神经网络构建,以及训练神经网络所使用的梯度下降算法,加深对神经网络训练过程的理解。

实验过程

数据集读取和预处理

智能计算系统实验2_第1张图片

train_labels = self.load_mnist(os.path.join(MNIST_DIR, TRAIN_LABEL), False)
test_images = self.load_mnist(os.path.join(MNIST_DIR, TEST_DATA), True)
test_labels = self.load_mnist(os.path.join(MNIST_DIR, TEST_LABEL), False)

全连接层

智能计算系统实验2_第2张图片

self.output = np.matmul(self.input, self.weight) + self.bias
self.d_weight = np.dot(self.input.T, top_diff)
self.d_bias = np.sum(top_diff, axis=0)
bottom_diff = np.dot(top_diff, self.weight.T)
self.weight = self.weight - lr * self.d_weight
self.bias = self.bias - lr * self.d_bias

relu层

智能计算系统实验2_第3张图片

output = np.maximum(0, self.input)
bottom_diff = top_diff
bottom_diff[self.input < 0] = 0

softmax层

智能计算系统实验2_第4张图片

self.prob = input_exp / np.sum(input_exp, axis=1, keepdims=True)
bottom_diff = (self.prob - self.label_onehot) / self.batch_size

组网

智能计算系统实验2_第5张图片

self.fc2 = FullConnectedLayer(self.hidden1, self.hidden2)
self.relu2 = ReLULayer()

前向传播和反向传播

智能计算系统实验2_第6张图片

h2 = self.fc2.forward(h1)
h2 = self.relu2.forward(h2)
h3 = self.fc3.forward(h2)
dh3 = self.fc3.backward(dloss)
dh2 = self.relu2.backward(dh3)
dh2 = self.fc2.backward(dh2)

推导过程

智能计算系统实验2_第7张图片

实验打分标准

智能计算系统实验2_第8张图片

实验2.2:基于DLP平台实现手写数字分类

实验目的

熟悉深度学习处理器 DLP 平台的使用,能使用已封装好的 Python 接口的机器学习编程库 pycnml 将第2.1节的神经网络推断部分移植到 DLP 平台,实现手写数字分类。具体包括:

  1. 利用提供 pycnml 库中的 Python 接口搭建手写数字分类的三层神经网络。
  2. 熟悉在 DLP 上运行神经网络的流程,为在后续章节详细学习 DLP 高性能库以及智
    能编程语言打下基础。
  3. 与第2.1节的实验进行比较,了解 DLP 相对于 CPU 的优势和劣势

实验过程

基本就是第一个实验的简化版,将layer的创建换成了pycml的接口,接口调用参考实验手册即可,注意要加载2.1实验保存的模型参数。

实验打分标准

智能计算系统实验2_第9张图片
————————————————————————————————
2022/4/12
感觉看这个实验的人挺多的,后续的实验笔记我也不想补了,我把所有实验代码放下面,需要的自取就行。
链接:https://pan.baidu.com/s/1NryUcNti7oETCXzcfgTCsQ
提取码:cxsv

你可能感兴趣的:(神经网络,深度学习,python)