吴恩达机器学习 目标18天完成 8.21 Day11

学习笔记

1.3 需求预测

1.简化的单一神经元模型
*x是学习算法的输入,在一般的机器学习算法中,我们使用f作为输出,在神经网络中我们用a代替factivation代表激活量。
*我们可以将当前的逻辑回归算法看做一个简单的神经元模型,x作为神经元的输入,通过神经元的处理之后,输出activation,作为对其下游神经元的输入。image.png
2.神经网络
*神经网络由多层神经网络层组成,每层的神经元可以多个或一个
*每层的神经元可以获取来自上一层神经网络层的所有特征
*中间的层一般称为隐藏层,因为这层的神经元获取上一层神经元的哪些信息以及这层神经元会输出多少激活量都是不需要我们去设置的,神经网络会自动设置
*本神经网络接收一个特征向量x,hidden layer接收特征向量,输出新的向量a传送到output layer,output layer输出最终的预测值
image.png
3.包含多层隐藏层的神经网络image.png

1.4 举例-图像感知

1.如图所示是图像通过神经网络的识别过程image.png

2.1 神经网络中的网络层 neural network layer

1.输入层一般为网络层0,我们通常使用右上方标,表明对应的参数是第几层网络层的数据image.png
2.image.png

2.2 更复杂的神经网络 more complex neural networks

1.按照惯例,我们说神经网络有四层的时候,包括所有的隐藏层,但不包含输入层。如图,本节的案例是一个四层神经网络。
image.png
2.
l是所在的网络层[0...],j是所在网络层内对应的神经元[1,2...]
a_j^l=g(**w_j*a_j^l-1**+b_j^l)计算所在网络层单个神经元激活量image.png

2.3 神经网络前向传播 forward propagation

1.layer_1的计算image.png
2.layer_2的计算
image.png
3.layer_3的计算
image.png
4.前向传播,神经网络的激活值传播方向向前。这种类型的神经网络架构一般越接近输出层,隐藏层中神经元的数量越少。

3.1 如何用代码实现推理

1.
Dense是密集层,是神经网络层的一种类型
Dense(units=25,activation='sigmoid')表示创建一层神经网络,有25个神经元,用于计算的激活函数是sigmoidimage.png

3.2 Tensorflow中数据形式

1.
*[[...]][...]之间的区别在于,前者是一个(m,n)的矩阵,后者是一个一维数组,没有行列的概念,只是一个列表image.png
2.
*输入x采用矩阵形式[[...]]
tensorflow和numpy表示数据的方式有些不同,但tensor.numpy()可以将tensor转化为numpy数组形式
layer_(x)得到的是一个tf.Tensor([[0.2 0.7 0.3]],shape=(1,3),dtype=float32)是一个二阶张量
image.png

3.3 搭建一个神经网络

1.
*sequential framework顺序串联网络层,构建神经网络
*训练神经网络需要调用2个函数model.compile(...)model.fit(x,y),后者在tensorflow中通过顺序串联的方式搭建神经网络,并使用数据x和y对其进行拟合
image.png
image.png

4.1 单个网络层上的前向传播 forward prop in a single layer

1.
*tips:我们这里统一用一维数组表示数据
image.png

4.2 前向传播的一般实现

1.image.png

5.1 强人工智能

1.AI的分类为ANI和AGI,由于我们本身对人脑的研究工作尚未达到很高的境界,因此是否能达到AGI也未可知。image.png

6.1 神经网络为何如此高效

1.
*利用GPU并行式计算,向量化的矩阵乘法使得神经网络变得高效image.png

6.4 矩阵乘法代码

1.ndarray.T对数组进行转置
image.png
2.Z=np.matmul(AT,W)是矩阵乘法Z=AT*W的代码化实现,我们也可以通过Z=AT@W实现矩阵乘法
image.png
3.矩阵乘法的算法与代码实现image.png

Labs

  • lab1
  • lab02
  • lab03

C2

lab01 neurons and layers

1.引入tensorflow相关的包

...
import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid
...
tf.autograph.set_verbosity(0)

2.
image.png
image.png

创建单一神经元

1.linear_layer=tf.keras.layers.Dense(units=1,activation='linear'),units表示创建的Dense密集神经网络层的神经元的数量,activation对应我们使用什么类型的激活函数去计算激活值。
2.a1=linear_layer(X_train[0].reshape(1,1))
*这里我们通过传入训练集对模型进行初始的训练,返回值为预测的y_hat
*在这种情形下,默认的参数w一般是随机设置的很小的数字,b一般默认为0,同样的,我们通过tensorflow得到的值依旧是张量
image.png
*需要注意的是,tensorflow接收的数据必须是一个矩阵,因此我们在传入训练集的时候需要对其进行reshape。
*a1的值是一个tensor张量,[[-0.01]],对应训练的结果
image.png
3.linear_layer.get_weights([np.array([[200.]]),np.array([100])])设置训练参数

创建包含隐藏层的神经网络

1.
image.png
*Sequential顺序模型是一种简单的神经网络模型架构
*可以通过model.summary()返回模型的信息,关于模型的层数,每层包含的参数等
可以通过model.get_layer('L1')得到某一层神经网络,从而进行我们在上一小节中的操作,通过先设置好某一神经网络的参数再进行模型训练
a1=model.predict(X_train[0].reshape(1,1))返回经过神经网络训练得到的activation值

安装虚拟环境教程

1.https://blog.csdn.net/ZM_MY/article/details/129585895安装虚拟环境+吴恩达课程bug
2.https://zhuanlan.zhihu.com/p/94744929用conda创建虚拟环境泛化教程+常见conda命令
3.Keras和Tensorflow的关系
*在tf2.0版本之后,keras被集成到tf中,作为默认API使用
*Keras的版本与TensorFlow的版本是紧密相关的,因为它们之间存在依赖关系,精确到每一版
*TensorFlow 2.x支持Keras,但旧版本的TensorFlow可能需要不同版本的Keras
*在TensorFlow 2.0版本及以下,Keras是作为一个单独的软件包进行安装和使用的,并且可以与其他深度学习框架一起使用。

lab02 CoffeeRoasting_TF

1.虽然在本周的课程中没有提到,但是正如我们之前的课程提到的,对数据进行normalization标准化、对特征参数进行正则化regularization等,可以加速我们的计算过程。
2.在tensorflow中,我们创建Keras normalization layer,对数据进行标准化处理,但需要注意的是,这并不是包含在我们神经网络中的神经网络层。
3.一共分3步处理
norm_1=tf.keras.layers.Normalization(axis=-1)tf.keras.layers.Normalization是标准化连续特征的预处理层,axis默认为-1,表示其中输入的最后一个轴被假定为特征维度并按索引进行归一化处理。这里的操作是模型实例化,并设定需要标准化数据的标准维度。
norm_1.adapt(X)学习X的方差和均值等数据
*Xn=norm_1(X)通过之前的数据对X进行标准化处理
4.建立神经网络

model=Sequential(
    [
        tf.Keras.Input(shape=(2,)),
        Dense(3,activation='sigmoid',name='layer1'),
        Dense(1,activation='sigmoid',name='layer2')
    ]
)
*`tf.Keras.Input(shape=(2,))`这句可以在实践中省去,此句限定了输入数据的特征维度,因为如果我们将当前神经网络层`l`输入的数据看作`a[l-1]`的话,就是一般是以A的形态传入的。![image.png](https://cdn.nlark.com/yuque/0/2023/png/26817966/1692624878385-fc3994c2-211e-483f-82d6-6b10a0cb3fa7.png#averageHue=%23f9f8f7&clientId=ud653cdef-148a-4&from=paste&height=145&id=u7d4867df&originHeight=181&originWidth=446&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=42179&status=done&style=none&taskId=u4ff1d121-c3b0-407e-bf2f-2a33475923b&title=&width=356.8)<br />*获取各层的权重与偏差`W,b=model.get_layer("layer1").get_weight()`,W对应的size`(features' number of input,neurons' number)`,b对应的size`(neurons' number,)`<br />![image.png](https://cdn.nlark.com/yuque/0/2023/png/26817966/1692625476155-6549355a-f04e-408a-af53-ecf1c291ddae.png#averageHue=%23faf9f8&clientId=ud653cdef-148a-4&from=paste&height=325&id=u061fccf9&originHeight=406&originWidth=681&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=48695&status=done&style=none&taskId=ub1e0e455-8788-4dd4-a818-c4062d54ef4&title=&width=544.8)<br />*`epochs`表示训练迭代的次数
model.compile(
    loss = tf.keras.losses.BinaryCrossentropy(),
    optimizer = tf.keras.optimizers.Adam(learning_rate=0.01),
)

model.fit(
    Xt,Yt,            
    epochs=10,
)

image.png
*image.png
*我们的输入数据size是(m,2)其中m是样本的数量
*因为我们已经标准化了输入特征,所以我们也必须标准化我们的测试数据
*要进行预测,可以应用model.predict(X)方法
image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值