文章目录
-
- 神经网络(第二课第一周)
-
-
- (一)神经网络的内涵
- (二)如何构建神经元层
-
- [1、tensorflow如何处理数据(Tensorflow 是由 Google 开发的机器学习包。)](#1、tensorflow如何处理数据(Tensorflow 是由 Google 开发的机器学习包。))
- 2、详细的一些实验代码,可以参考第二课第一周的相关代码。以下是一些代码相关的解释:(以下都是使用Tensorflow构建的神经网络)
- 3、详细的一些实验代码,可以参考第二课第一周的相关代码。以下是一些代码相关的解释:(以下都是使用Numpy构建的神经网络)
- [(三)使用 Keras [Sequential 模型](https://keras.io/guides/sequential_model/)和具有 sigmoid 激活的 [Dense Layer](https://keras.io/api/layers/core_layers/dense/) 来构建网络。(以识别手写数字为例)](#(三)使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 来构建网络。(以识别手写数字为例))
-
- 1、首先清楚你数据集特征值和目标值的大小
- 2、其次要清楚你要创建什么样的神经网络,这个神经网络有几层,每一层有多少个激活值(新特征),以及激活函数是什么
- [3、使用 Keras [Sequential 模型](https://keras.io/guides/sequential_model/)和具有 sigmoid 激活的 [Dense Layer](https://keras.io/api/layers/core_layers/dense/) 来构建上述网络。](#3、使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 来构建上述网络。)
- 4、定义损失函数并运行梯度下降,以使模型的权重适合训练数据。
- [5、使用训练完成的模型对数据进行预测:使用 [Keras ](https://www.tensorflow.org/api_docs/python/tf/keras/Model)`predict`。要`预测`的输入是一个数组,因此单个示例被重塑为二维。](#5、使用训练完成的模型对数据进行预测:使用 Keras
predict
。要预测
的输入是一个数组,因此单个示例被重塑为二维。)
- [(四)使用 numpy来构建网络。(以识别手写数字为例)](#(四)使用 numpy来构建网络。(以识别手写数字为例))
-
神经网络(第二课第一周)
(一)神经网络的内涵
主要应用:语音、图像、文本。
**神经网络的内涵:**从原有的特征(特征向量)进行学习或者回归得到新的更能预测真实值的或者是更具有代表性的特征,使用新的特征(激活向量)再次学习或者回归,得到最终的预测概率。它的基本构建模块是一个神经元层。
神经网络应用于人脸识别:

(二)如何构建神经元层
在拟合新特征时一般使用的是逻辑回归函数,也称为激活函数,得到激活向量,作为新的特征值,这样以此类推(称之为向前传播)。
1、tensorflow如何处理数据(Tensorflow 是由 Google 开发的机器学习包。)
tensorflow可以将之前创建的两层或多层神经元按照顺序串联起来,形成一个神经网络。示例如下:

向前传播的代码解释:

2、详细的一些实验代码,可以参考第二课第一周的相关代码。以下是一些代码相关的解释:(以下都是使用Tensorflow构建的神经网络)
(1)线性神经单元层
定义一个具有一个神经元或单元的层,激活函数是线性回归。
plain
linear_layer = tf.keras.layers.Dense(units=1, activation = 'linear', )
我们可以使用linear_layer.get_weights()或者是linear_layer.set_weights([set_w, set_b])可以设置神经元层的各参数权重。同时也可以通过将实例(矩阵)输入给模型,模型会初始化随机值权重。示例如下:

(2)逻辑神经单元层(一层和两层)


TensorFlow 的 Normalization
层可以用来自动学习数据的统计特性(均值和方差),并对数据进行标准化处理,使得数据的分布更加均匀,这通常有助于机器学习模型的训练和收敛。

拟合后会得到新的权重。有了新的权重之后我们可以对新的测试集进行归一化,然后使用新模型进行预测。
3、详细的一些实验代码,可以参考第二课第一周的相关代码。以下是一些代码相关的解释:(以下都是使用Numpy构建的神经网络)

与之前的不同之处在于,计算逻辑回归值一个是使用的矩阵乘法,一个是使用循环相加。创建神经网络也各有不同。
明白上面的之后,我们可以做一下第二课第一周的最后一个练习,看看掌握没有。
(三)使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 来构建网络。(以识别手写数字为例)
1、首先清楚你数据集特征值和目标值的大小
手写数字数据集大小为1000X400;共计1000个样本,每个样本400个特征;目标是一个二分类问题,分类结果是0或者1。大小是1000x1。
2、其次要清楚你要创建什么样的神经网络,这个神经网络有几层,每一层有多少个激活值(新特征),以及激活函数是什么
这里手写数字的这个要创建的神经网络一共是3层,激活值分别是25、15、1;激活函数都是sigmoid函数。
3、使用 Keras Sequential 模型和具有 sigmoid 激活的 Dense Layer 来构建上述网络。
示例代码如下:
使用model.summary可以输出你创建的神经网络的结构。例如:
创建完成神经网络之后,我们应该已经清楚每一层的w和b它们的大小是怎样的,例如第一层的w的大小应该是:400x25;b是25x1;第二层的w是25x15,b是15x1;以此类推。
我们可以检查一下创建的神经网络的权重大小是否一致,示例如下:
4、定义损失函数并运行梯度下降,以使模型的权重适合训练数据。

5、使用训练完成的模型对数据进行预测:使用 Keraspredict
。要预测
的输入是一个数组,因此单个示例被重塑为二维。

模型的输出被解释为概率。在上面的第一个示例中,输入为零。该模型预测输入为 1 的概率几乎为零。在第二个示例中,input 是 1。该模型预测输入为 1 的概率接近 1。与 Logistic 回归的情况一样,将概率与阈值进行比较以做出最终预测。

(四)使用 numpy来构建网络。(以识别手写数字为例)
1、特别需要注意的是,手动定义计算激活值的函数:

矢量化numpy,仅用三行代码代替循环计算。

2、定义三层神经网络(这里的权重和偏差需要我们输入给他,或者是使用tensorflow已经训练好的权重给他)

我不太清楚这里为啥还要用一下numpy,用它的意义在哪里,tensorflow明明可以直接拟合出参数。