├── README.md ├── ch01-overview-deeplearning └── ch01-overview-deeplearning.pdf ├── ch02-logical-operations-with-DL ├── Rosenblatt_perceptron.py ├── ch02-logical-operations-with-DL.pdf └── main.py ├── ch03-self-learning-of-nn └── ch03-self-learning-of-nn.pdf ├── ch04-BackPropagation-algorithm └── ch04-BackPropagation-algorithm.pdf ├── ch05-output-layer-and-loss-functions └── ch05-output-layer-and-loss-functions.pdf ├── ch08-convolutional-neural-network ├── ch08-convolutional-neural-network-1.pdf ├── ch08-convolutional-neural-network-2.pdf └── ch08-convolutional-neural-network-3.pdf ├── images └── logo.png └── materials ├── schedule.md └── syllabus.md /README.md: -------------------------------------------------------------------------------- 1 | ![](./images/logo.png) 2 | 3 | 4 | 5 | ## 深度学习基础教程 6 | 7 | * [教学大纲](./materials/syllabus.md) 8 | * [进度计划](./materials/schedule.md) 9 | 10 | ## 课程列表 11 | 12 | 第一章 初识深度学习 13 | 14 | 第二章 构造神经网络 15 | 16 | 第三章 ANN的自我学习 17 | 18 | 第四章 反向传播算法 19 | 20 | 第五章 输出层与代价函数 21 | 22 | 第六章 自编码器与栈式自编码器 23 | 24 | 第七章 稀疏自编码器 25 | 26 | 第八章 卷积神经网络(一) 27 | 28 | 第九章 卷积神经网络(二) 29 | 30 | 第十章 卷积神经网络(三) 31 | 32 | 33 | 34 | *markdown文档中的公式使用Mathjax格式,推荐使用[typora](https://typora.io/)查看文档。* -------------------------------------------------------------------------------- /ch01-overview-deeplearning/ch01-overview-deeplearning.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch01-overview-deeplearning/ch01-overview-deeplearning.pdf -------------------------------------------------------------------------------- /ch02-logical-operations-with-DL/Rosenblatt_perceptron.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | # 在a、b点附近生成样本 4 | a = tf.constant([[2.], [2]]) 5 | b = tf.constant([[-2.], [2]]) 6 | random_num = tf.truncated_normal(dtype=tf.float32, shape=[2, 1]) 7 | 8 | # 参数 9 | weights = tf.Variable([[0.], [0]]) 10 | biases = tf.Variable(0.) 11 | 12 | # 模型输入 13 | x = tf.placeholder(shape=[2, 1], dtype=tf.float32) 14 | 15 | # 模型 16 | model = tf.matmul(weights, x, transpose_a=True) + biases 17 | 18 | # 学习率 19 | lr = 0.5 20 | 21 | with tf.Session() as sess: 22 | sess.run(tf.global_variables_initializer()) 23 | # 训练 24 | for i in range(1000): 25 | if i % 2 == 0: 26 | tmp_num = a + random_num 27 | else: 28 | tmp_num = b + random_num 29 | tmp_num = sess.run(tmp_num) 30 | h = sess.run(model, feed_dict={x: tmp_num}) 31 | h = h.reshape([]) 32 | # 实际为负类 预测为正类 33 | if h > 0 and i % 2 == 1: 34 | sess.run(weights.assign_sub(lr * tmp_num)) 35 | sess.run(biases.assign_sub(lr * 1)) 36 | print('modify param (sub)') 37 | # 实际为正类 预测为负类 38 | if h <= 0 and i % 2 == 0: 39 | sess.run(weights.assign_add(lr * tmp_num)) 40 | sess.run(biases.assign_add(lr * 1)) 41 | print('modify param (add)') 42 | 43 | 44 | # 测试 45 | test_num = 100 46 | correct_num = 0 47 | for i in range(test_num): 48 | if i % 2 == 0: 49 | tmp_num = a + random_num 50 | else: 51 | tmp_num = b + random_num 52 | tmp_num = sess.run(tmp_num) 53 | h = sess.run(model, feed_dict={x: tmp_num}) 54 | h = h.reshape([]) 55 | 56 | if (h > 0 and i % 2 == 0) or (h <= 0 and i % 2 == 1): 57 | correct_num = correct_num + 1 58 | print('correct rate %.2f' % (correct_num / float(test_num))) -------------------------------------------------------------------------------- /ch02-logical-operations-with-DL/ch02-logical-operations-with-DL.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch02-logical-operations-with-DL/ch02-logical-operations-with-DL.pdf -------------------------------------------------------------------------------- /ch02-logical-operations-with-DL/main.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | class Neuron(object): 4 | '''sigmoid神经元''' 5 | def __init__(self): 6 | self.weights = 0 7 | self.bias = 0 8 | self.inputs = 0 9 | self.output = 0 10 | self.len_inputs = -1 11 | 12 | def sigmoid(self, x): 13 | '''sigmoid实现 f = 1/(1 + e^(-x))''' 14 | return 1/(1 + np.exp(-x)) 15 | 16 | def sigmoid_derivative(self, h): 17 | '''sigmoid导数 f' = f(1-f) ''' 18 | tmp = self.sigmoid(h) 19 | return tmp(1 - tmp) 20 | 21 | def forward(self, inputs): 22 | '''利用inputs构造神经元,输出激活值。 23 | 24 | Args: 25 | inputs: shape=(n, ) n表示输入的参数数量 26 | Return: 27 | 一个常量 28 | ''' 29 | self.inputs = inputs 30 | if self.len_inputs == -1: 31 | # 使用均值为0,方差为0.1的值来初始化权重 32 | self.len_inputs = inputs.shape[0] 33 | self.weights = np.random.normal( 34 | loc=.0, scale=.1, size=self.len_inputs) 35 | self.output = self.sigmoid(np.dot(self.weights.T, self.inputs)) 36 | return self.output 37 | 38 | 39 | class Layer(object): 40 | '''实现神经网络的一个层''' 41 | def __init__(self, num_node): 42 | '''输入当前层的神经元个数,构造神经网络的一个层。''' 43 | self.num_node = num_node 44 | self.neurons = [Neuron() for _ in range(num_node)] 45 | self.inputs = 0 46 | self.output = 0 47 | 48 | def calc(self, x): 49 | self.inputs = x 50 | self.output = np.array([n.forward(x) for n in self.neurons]) 51 | return self.output 52 | 53 | 54 | class ANNNet(object): 55 | def __init__(self, layers_detail=[4, 4, 1]): 56 | self.layers_detail = layers_detail 57 | self.layers = [Layer(n) for n in self.layers_detail] 58 | 59 | def fit(self, inputs): 60 | output = inputs 61 | for layer in self.layers: 62 | output = layer.calc(output) 63 | return output 64 | 65 | def main(): 66 | ann = ANNNet() 67 | res = ann.fit(np.array([1, 2, 3])) 68 | return res 69 | 70 | if __name__ == '__main__': 71 | print(main()) -------------------------------------------------------------------------------- /ch03-self-learning-of-nn/ch03-self-learning-of-nn.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch03-self-learning-of-nn/ch03-self-learning-of-nn.pdf -------------------------------------------------------------------------------- /ch04-BackPropagation-algorithm/ch04-BackPropagation-algorithm.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch04-BackPropagation-algorithm/ch04-BackPropagation-algorithm.pdf -------------------------------------------------------------------------------- /ch05-output-layer-and-loss-functions/ch05-output-layer-and-loss-functions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch05-output-layer-and-loss-functions/ch05-output-layer-and-loss-functions.pdf -------------------------------------------------------------------------------- /ch08-convolutional-neural-network/ch08-convolutional-neural-network-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch08-convolutional-neural-network/ch08-convolutional-neural-network-1.pdf -------------------------------------------------------------------------------- /ch08-convolutional-neural-network/ch08-convolutional-neural-network-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch08-convolutional-neural-network/ch08-convolutional-neural-network-2.pdf -------------------------------------------------------------------------------- /ch08-convolutional-neural-network/ch08-convolutional-neural-network-3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/ch08-convolutional-neural-network/ch08-convolutional-neural-network-3.pdf -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/images/logo.png -------------------------------------------------------------------------------- /materials/schedule.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edu2act/course-deep-learning/55685ca9b54e97254551889d98a2505349695c14/materials/schedule.md -------------------------------------------------------------------------------- /materials/syllabus.md: -------------------------------------------------------------------------------- 1 | #第一章 初识深度学习# 2 | 3 | ### 重点 4 | 5 | 1. 理解DL的起源、发展、作用以及对我们的意义。 6 | 2. 明了DL、ANN、MLP的关系。 7 | 8 | ### 难点 9 | 10 | 无 11 | 12 | ### 教学目标 13 | 14 | 1. 掌握深度学习相关术语的意义、符号表示。 15 | 2. 掌握深度学习模型的优势。 16 | 3. 了解DL的用途。 17 | 18 | # 第二章 构造神经网络 19 | 20 | ### 重点 21 | 22 | 1. 神经元的数学表达。 23 | 2. 常见激活函数的作用与意义。 24 | 3. python简单时间ANN。 25 | 4. 利用ANN解决XOR问题。 26 | 27 | ### 难点 28 | 29 | 1. 解决XOR问题的意义。 30 | 31 | ### 教学目标 32 | 33 | 1. 理解人工神经元的解构,并能够自己实现人工神经元。 34 | 2. 理解全连接神经网络的结构。 35 | 3. 解决XOR问题的意义。 36 | 37 | # 第三章 ANN的自我学习 38 | 39 | ### 重点 40 | 41 | 1. 梯度下降法的意义。 42 | 2. 反向传播算法的优势。 43 | 3. 过拟合与欠拟合的解决方法。 44 | 45 | ### 难点 46 | 47 | 1. 反向传播算法的优势。 48 | 2. 非凸函数的存在局部极小值的解决方案。 49 | 50 | ### 教学目标 51 | 52 | 1. 明了均方误差代价函数的意义。 53 | 2. 明了梯度下降法的意义。 54 | 3. 明了参数初始化的基本方法。 55 | 4. 明了参数更新规则。 56 | 5. 学会计算神经网络的参数规模。 57 | 6. 了解神经网络的输入层与输出层分布处理输入与输出的基本方法。 58 | 7. 了解过拟合与欠拟合以及解决方案。 59 | 60 | # 第四章 反向传播算法 61 | 62 | ### 重点 63 | 64 | 1. 反向传播算法的推导过程。 65 | 2. 梯度不稳定的缘由和解决方案。 66 | 67 | ### 难点 68 | 69 | 1. 反向传播算法的推导过程。 70 | 71 | ### 教学目标 72 | 73 | 1. 理解并掌握反向传播算法的推导过程。 74 | 2. 明了梯度不稳定的缘由。 75 | 3. 明了均方误差代价函数的优缺点。 76 | 77 | # 第五章 输出层与代价函数 78 | 79 | ### 重点 80 | 81 | 1. sigmoid、softmax等激活函数的作用。 82 | 2. 均方误差代价函数、交叉熵代价函数以及对数似然代价函数的使用范围。 83 | 84 | ### 难点 85 | 86 | 1. 极大似然代价函数的推导。 87 | 88 | ### 教学目标 89 | 90 | 1. 掌握sigmoid激活函数的公式、作用、使用场景。 91 | 2. 掌握softmax激活函数的公式、作用、使用场景。 92 | 3. 掌握均方误差代价函数的使用场景。 93 | 4. 掌握交叉熵代价函数的使用场景。 94 | 5. 掌握对数似然代价函数的使用场景。 95 | 96 | # 第六章 自编码器 97 | 98 | ### 重点 99 | 100 | 1. 自编码器的结构、训练方法。 101 | 2. 普通自编码器的用途。 102 | 3. 降噪自编码器的训练方法与用途。 103 | 4. 栈式自编码器的训练方法与意义 104 | 105 | ### 难点 106 | 107 | 1. 自编码器的意义。 108 | 2. 降噪自编码器的训练方法 109 | 3. 栈式自编码器的训练。 110 | 111 | ### 教学目标 112 | 113 | 1. 理解并掌握自编码器的结构、训练方法、使用场景。 114 | 2. 理解并掌握降噪自编码器的训练方法与使用场景。 115 | 3. 理解并掌握栈式自自编码器的训练方法与使用场景。 116 | 117 | # 第七章 特征表达与稀疏自编码器 118 | 119 | ### 重点 120 | 121 | 1. 特征的表现形式。 122 | 2. 模型如何输入不同类型样本。 123 | 3. 稀疏激活性的优势。 124 | 4. 稀疏自编码器的结构 125 | 5. 隐藏层神经元激活度的衡量方法。 126 | 6. KL散度的用法与意义。 127 | 128 | ### 难点 129 | 130 | 1. 隐藏层神经元激活度的衡量方法。 131 | 2. 带稀疏性约束的代价函数。 132 | 133 | ### 教学目标 134 | 135 | 1. 理解并掌握特征的概念。 136 | 2. 掌握KL散度的公式写法与意义。 137 | 3. 理解并掌握稀疏性约束的方法。 138 | 139 | # 第八章 卷积神经网络(一) 140 | 141 | ### 重点 142 | 143 | 1. 局部感知的意义。 144 | 2. 卷积的作用。 145 | 3. 卷积特征图的大小的计算方法。 146 | 4. 多核卷积的过程。 147 | 5. 下采样的方法。 148 | 149 | ### 难点 150 | 151 | 1. 卷积与池化的步长。 152 | 2. 多核卷积中卷积核的数量。 153 | 154 | ### 教学目标 155 | 156 | 1. 理解局部感知背后的原理。 157 | 2. 理解卷积与局部感知的关系。 158 | 3. 学会计算特征图的大小。 159 | 4. 理解多核卷积中计算卷积核数量的方法。 160 | 5. 掌握池化的方法。 161 | 162 | # 第九章 卷积神经网络(二) 163 | 164 | ### 重点 165 | 166 | 1. 卷积与池化计算的详细过程。 167 | 2. 理解通道的概念。 168 | 3. 多通道卷积的方法。 169 | 4. 卷积与池化边界处理的方法。 170 | 5. 卷积层与池化层的灵活应用。 171 | 172 | ### 难点 173 | 174 | 1. 多通道卷积的方法。 175 | 2. 卷积与池化边界处理的计算方法。 176 | 177 | ### 教学目标 178 | 179 | 1. 掌握卷积与池化详细计算的过程。 180 | 2. 掌握多通道卷积的计算过程。 181 | 3. 掌握边界处理的两种方法。 182 | 4. 掌握边界处理中边界计算的方法。 183 | 184 | # 第十章 卷积神经网络(三) 185 | 186 | ### 重点 187 | 188 | 1. 卷积神经网络的反向传播算法。 189 | 2. 卷积与池化的灵活应用。 190 | 191 | ### 难点 192 | 193 | 1. 理解卷积神经网络的反向传播算法。 194 | 195 | ### 教学目标 196 | 197 | 1. 掌握卷积神经网络反向传播算法的计算方法。 198 | 2. 掌握卷积层与池化层的应用。 199 | 200 | ### --------------------------------------------------------------------------------