机器学习(吴恩达) 4

神经网络/深度学习

1.综述

        动机:建立软件模仿大脑 应用:语音识别 到 计算机视觉 到 文本(自然语言过程NLP)

        传统机器学习:线性回归,逻辑回归

2.需求预测

        层:一层可以有多个/一个神经元,以相同或相似特征作为输出,输出几个数字

        激活(activation):生物神经元发送高输出值的程度

        包括了输入层,隐藏层,输出层

        神经网络具有从数据中自动学习并选择重要特征的能力

        例子:图像识别(从学习边缘到学习面部特征和形状)

3.层

        上标[1/2]表明与神经网络第1/2层相关的数量 神经网络的工作原理:每一层输入一个数字向量,并对其应用一组逻辑回归单元,计算另一个数字向量,然后从一层到另一层,直到得到最终的输出

        输入层也叫零层,这个神经网络有4层,包括隐藏层和输出层。

        计算任何层的激活:(给定前一层的激活时)

        其中L是层数,把特征向量x设置为a[0]

        前向传播类似于上面这种,越靠近输出层,隐藏层的神经元数量就越少

4.TensorFlow中的数据

x = np.array([[200,17]])#组成一个1×2的二维矩阵
#结果为[200 17]
x = np.array([[200],[17]])#组成一个2×1的二维矩阵
#结果为[200
#		17]
x = np.array([200,17])#组成一个一维数组

tf.Tensor([[0.2 0.7 0.3]],shape=(1,3),dtype=float32)#建立1×3数组的TensorFlow 张量
a1.numpy()#以numpy数组的形式返回

在TensorFlow中构建神经网络

#前向传播计算
x = np.array([[200.0,17.0]])#初始化数据
layer_1 = Dense(units=3,activation="sigmoid")#创建第一层
a1 = layer_1(x)#计算a1

layer_2 = Dense(units=1,activation="sigmoid")#创建第二层
a2 = layer_2(a1)#计算a2
layer_1 = Dense(units=3,activation="sigmoid")
layer_2 = Dense(units=1,activation="sigmoid")
model = Sequential([layer_1,layer_2])#tensorflow的序列函数自动把layer_1和2串在一起构成神经网络

x = np.array([[200.0,17.0],[120.0,5.0],[425.0,20.0],[212.0,18.0]])#把数据numpy数组,4×2矩阵
y = np.array([1,0,0,1])#y存放在一个一维数组
model.compile(...)#编译
model.fit(x,y)#拟合
model.predict(x_new)#预测

#简化前三行
model = Sequential([Dense(units=25,activation="sigmoid"),Dense(units=15,activation="sigmoid"),Dense(units=1,activation="sigmoid")])

在单个层中实现前向传播

前向传播的一般实现

        W.shaper[1]返回列数 shape[0] :读取行数 在线代中,矩阵用大写字母,小写字母用向量和标量表示

AI的关系

5.神经网络高效实现(矢量化)

矩阵乘法计算:

  • 前一个矩阵的列(转置)=后一个矩阵的行

  • 新矩阵的行数等于第一个矩阵的行(转置之后就是列),等于后一个矩阵的列 因为只有相同长度的向量可以点乘

        均为调用矩阵乘法函数的方式

自定义基础知识:张量和运算 | TensorFlow Core (google.cn)icon-default.png?t=N7T8https://tensorflow.google.cn/tutorials/customization/basics?hl=sv

6.TensorFlow实现

1告诉TensorFlow模型,如何计算 2使用特定的损失函数编译模型3训练模型

模型训练步骤:1如何计算输出根据给定的x和参数 2训练细节:损失函数 3最小化成本函数,来训练模型

补充: np.dot(A,B),np.matmul(a,b), a@b

二维矩阵,矩阵乘积;一维矩阵,内积(点乘,对应元素相乘最后相加)

np.multiply(A,B) 或 A*B

对应元素相乘,组成一个新数组

7.训练细节


  • 创建模型

  • 损失和成本函数

二元交叉熵损失函数(binary cross entropy function)

model.compile(loss=binary cross entropy())
  • 梯度下降

model.fit(X,y,epochs=100)

8.激活函数

  • 线性激活函数(Linear activation function):g(z)=z 还有一种说法是没有激活函数

  • sigmoid函数:g(z)=1/(1+e-z)

  • 线性整流函数(Rectified Linear Unit,ReLU):g(z)=max(0,z)

9.选择激活函数

  1. 选择输出层的激活函数取决于标签y

    • 当输出是0/1(二进制分类问题时),选择sigmoid激活函数

    • 当输出有正有负(回归问题),选择线性激活函数

    • 当输出非负时(回归问题),选择ReLU函数

  2. 隐藏层的激活函数使用relu作为默认激活函数

具体实现:

from tf.keras.layers import Dense
model = Sequential([
    Dense(units=25,activation='relu'),
    Dense(units=15,activation='relu'),
    Dense(units=1,activation='sigmoid')
])

10.为什么需要激活函数

  • 线性函数的线性函数还是线性函数

所以不要在神经网络的隐藏层使用线性激活函数

11.多类

多分类仍然是分类问题,其中可能有两个以上(≥2)可能的输出标签

12.softmax

softmax回归算法是logistic回归算法的推广

  • 逻辑回归与softmax回归的激活函数比较

  • 逻辑回归与softmax回归的成本函数比较

13.softmax实际代码:

sofrmax的改进(更推荐使用):

取消中间值,通过底部指定损失函数的表达式,使得计算更加准确

逻辑回归

model =  Sequential([ Dense(units=25,activation='sigmoid')
Dense(units=15,activation='sigmoid')
Dense(units=10,activation='linear')
])#输出层的激活改为线性

model.compile(loss=BinaryCrossEntropy(from_logits=True))

sofamax回归

model =  Sequential([ Dense(units=25,activation='relu')
Dense(units=15,activation='relu')
Dense(units=10,activation='linear')
])

model.compile(loss=SpareCrossEntropy(from_logits=True))

输出的是z1,等,所以预测时要调用softmax/sigmoid函数计算概率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值