神经网络/深度学习
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.神经网络高效实现(矢量化)
矩阵乘法计算:
-
前一个矩阵的列(转置)=后一个矩阵的行
-
新矩阵的行数等于第一个矩阵的行(转置之后就是列),等于后一个矩阵的列 因为只有相同长度的向量可以点乘
均为调用矩阵乘法函数的方式
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.选择激活函数
-
选择输出层的激活函数取决于标签y
-
当输出是0/1(二进制分类问题时),选择sigmoid激活函数
-
当输出有正有负(回归问题),选择线性激活函数
-
当输出非负时(回归问题),选择ReLU函数
-
-
隐藏层的激活函数使用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函数计算概率
标签:吴恩达,Dense,函数,sigmoid,activation,学习,units,机器,model From: https://blog.csdn.net/weixin_52140860/article/details/141781980