当前位置: 首页 > news >正文

AI——神经网络以及TensorFlow使用

文章目录

  • 一、TensorFlow安装
  • 二、张量、变量及其操作
    • 1、张量Tensor
    • 2、变量
  • 三、tf.keras介绍
    • 1、使用tf.keras构建我们的模型
    • 2、激活函数
      • 1、sigmoid/logistics函数
      • 2、tanh函数
      • 3、RELU函数
      • 4、LeakReLu
      • 5、SoftMax
      • 6、如何选择激活函数
    • 3、参数初始化
      • 1、bias偏置初始化
      • 2、weight权重初始化
        • 1、随机初始化
        • 2、标准初始化
        • 3、Xavier初始化
        • 4、He初始化
    • 4、神经网络构建
      • 1、通过Sequential构建
      • 2、function api方式构建
      • 3、Model子类构建方式
    • 5、神经网络的优缺点

一、TensorFlow安装

# 1、非GPU版本安装
pip3 install tensorflow==2.3.0# 2、GPU版本安装
pip3 install tensorflow-gpu==2.3.0

二、张量、变量及其操作

1、张量Tensor

在这里插入图片描述

import tensorflow as tf
import numpy as np# 创建基础的张量
## 1.创建int32类型的0维张量,即标量
rank_0_tensor = tf.constant(4)
print(rank_0_tensor)## 2.创建float32类型的1维张量
rank_1_tensor = tf.constant([2.0, 3.0, 4.0])
print(rank_1_tensor)## 3.创建float16类型的二维张量
rank_2_tensor = tf.constant([[1, 2],[3, 4],[5, 6]
], dtype=tf.float16)
print(rank_2_tensor)## 4.将张量转化为ndarray
np1 = np.array(rank_2_tensor)
print(np1)np2 = rank_2_tensor.numpy
print(np2)# 张量常用函数
a = tf.constant([[1, 2],[3, 4]
])
b = tf.constant([[1, 1],[1, 1]
])
print(tf.add(a, b)) # 计算张量元素的和
print(tf.multiply(a, b)) # 计算张量元素的乘积
print(tf.matmul(a, b)) # 计算张量矩阵的乘法# 聚合运算
c = tf.constant([[4.0, 5.0],[10.0, 1.0]
])
print(tf.reduce_max(c)) # 最大值
print(tf.reduce_mean(c)) # 平均值
print(tf.reduce_sum(c)) # 求和
print(tf.reduce_min(c)) # 最小值
print(tf.argmax(c)) # 最大值索引
print(tf.argmin(c)) # 最小值索引

2、变量

在这里插入图片描述

# 变量
var = tf.Variable([[1, 2],[3, 4]
])
print(var.shape) # 获取变量的形状
print(var.dtype) # 获取变量中数据类型
print(var.numpy) # 转化为ndarray
print(var.assign([[5, 6], [7, 8]])) # 修改变量值

三、tf.keras介绍

在这里插入图片描述

1、使用tf.keras构建我们的模型

# 绘图工具
import seaborn as sns
# 数组计算
import numpy as np
# sklearn相关工具
from sklearn.datasets import load_iris
# 划分测试集和训练集
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 逻辑回归
from sklearn.linear_model import LogisticRegressionCV
# tf.keras中使用的相关工具
# 用于模型搭建
from tensorflow.keras.models import Sequential
# 构建模型的层和激活工具
from tensorflow.keras.layers import Dense, Activation
# 数据处理的辅助工具
from tensorflow.keras import utils
# pandas工具,让数据更好看
import pandas as pd# 1.使用sklearn获取鸢尾花数据
iris = load_iris()
iris_d = pd.DataFrame(data=iris.data, columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])
# 设置其目标值为target_names
iris_d['species'] = iris['target_names'][iris['target']]
# 使用seaborn中的pairplot函数探索数据特征间的关系
sns.pairplot(iris_d, hue="species")# 使用sklearn实现# 所有的特征值
x = iris_d.values[:, :4]# 所有的目标值
y = iris_d.values[:, 4]# 利用train_test_split完成数据集划分,测试集20%,训练集80%
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)# 特征预处理
# transfer = StandardScaler()
transfer = MinMaxScaler((0, 1))
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)## 模型调优 - 交叉验证、网格搜索
# 实例化估计器,CV这个估计器已经调过优了
lr = LogisticRegressionCV()
# 模型训练
lr.fit(x_train, y_train)
# 模型评估
lr.score(x_test, y_test)# 使用tf.keras实现
# 1.生成目标值的热编码
def one_hot_encode(arr):# 获取目标值中的所有类别进行热编码uniques, ids = np.unique(arr, return_inverse=True)return utils.to_categorical(ids, len(uniques))# 2.对目标值进行热编码
y_train_one = one_hot_encode(y_train)
y_test_one = one_hot_encode(y_test)# 3.模型构建
model = Sequential([# 隐藏层,输入层,input_shape表示我们有几个特征Dense(10, activation="relu", input_shape=(4,)),# 隐藏层Dense(10, activation="relu"),# 输出层,3表示我们有几种结果Dense(3, activation="softmax")
])# 4.模型预测与评估
## 4.1 模型编译
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])## 4.2 模型训练
# 类型转换
x_train = np.array(x_train, dtype=np.float32)
x_test = np.array(x_test, dtype=np.float32)
model.fit(x_train, y_train_one, epochs=10, batch_size=1, verbose=1)## 4.3模型评估
loss, accuracy = model.evaluate(x_test, y_test_one, verbose=1)
print("loss: ", loss)
print("准确率:", accuracy)

2、激活函数

1、sigmoid/logistics函数

在这里插入图片描述
在这里插入图片描述
一般只用于输出层的二分类

2、tanh函数

在这里插入图片描述
在这里插入图片描述

3、RELU函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
无脑使用RELU

4、LeakReLu

在这里插入图片描述

5、SoftMax

softmax用于多分类过程中,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展示出来。
在这里插入图片描述

6、如何选择激活函数

在这里插入图片描述

3、参数初始化

1、bias偏置初始化

直接初始化为0

2、weight权重初始化

1、随机初始化

随机初始化从均值为0,标准差是1的高斯分布中取样,使用一些很小的值对参数w进行初始化

2、标准初始化

权重参数初始化从区间均匀随机取值,即在(-1/根号d/,根号d/1)均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量

3、Xavier初始化

该方法的基本思想是各层的激活值和梯度的方差在传播过程中保持一致,也叫做Glorot初始化,在tf.keras中实现方法有两种:

  • 正态化Xavier初始化
    在这里插入图片描述
  • 标准化Xavier初始化
    在这里插入图片描述
4、He初始化

he初始化,也称为Kaiming初始化,他的基本思想是正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变

  • 正太化的he初始化
    在这里插入图片描述
  • 标准化的he初始化
    在这里插入图片描述

4、神经网络构建

1、通过Sequential构建

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 定义一个Sequential模型,包含3层
model = keras.Sequential([# 第一层:激活函数为relu,权重初始化为he_normallayers.Dense(3, activation="relu", kernel_initializer="he_normal", name="layer1", input_shape=(3, )),# 第二层:激活函数为relu,权重初始化为he_normallayers.Dense(2, activation="relu", kernel_initializer="he_normal", name="layer2"),# 第三次:激活函数为sigmoid,权重初始化和he_normallayers.Dense(2, activation="sigmoid", kernel_initializer="he_normal", name="layer3")
])model.summary()

2、function api方式构建

在这里插入图片描述

# 使用function api方式构建神经网络
import tensorflow as tf
# 定义模型的输入
inputs = tf.keras.Input(shape=(3,), name = 'input')
# 第一层:激活函数为relu,其他默认
x = tf.keras.layers.Dense(3, activation='relu', name='layer1')(inputs)
# 第二层:激活函数为relu,其他默认
x = tf.keras.layers.Dense(2, activation='relu', name='layer2')(x)
# 第三次:输出层,激活函数为sigmoid
outputs = tf.keras.layers.Dense(2, activation='sigmoid', name='layer3')(x)
# 使用Model创建模型
model = tf.keras.Model(inputs = inputs, outputs=outputs, name='my_model')
model.summary()

3、Model子类构建方式

# 使用Model子类的方式构建神经网络
import tensorflow as tfclass MyModel(tf.keras.Model):# 在init方法中定义网络的层结构def __init__(self):super(MyModel, self).__init__()# 第一层:激活函数为relu,权重初始化为he_normalself.layer1 = tf.keras.layers.Dense(3, activation='relu', kernel_initializer='he_normal', name='layer1', input_shape=(3,))# 第二层:激活函数为relu,权重初始化为he_normalself.layer2 = tf.keras.layers.Dense(2, activation='relu', kernel_initializer='he_normal', name='layer2')# 第三次:激活函数为sigmoid,权重初始化为he_normalself.layer3 = tf.keras.layers.Dense(2, activation='sigmoid', kernel_initializer='he_normal', name='layer3')# 在call方法中完成前向传播def call(self, inputs):x = self.layer1(inputs)x = self.layer2(x)return self.layer3(x)# 实例化model
model = MyModel()
# 设置一个输入调用模型(否则无法使用summary方法)
x = tf.ones((1, 3))
y = model(x)
model.summary()

5、神经网络的优缺点

在这里插入图片描述

相关文章:

  • 树莓派超全系列教程文档--(36)树莓派条件过滤器设置
  • 测试新版oda teigha,开发webcad,实现在线查看dwg图纸
  • 人工智能-机器学习其他技术(决策树,异常检测,主成分分析)
  • hadoop分布式部署
  • 基于深度学习的线性预测:创新应用与挑战
  • JSON-RPC远程控制
  • AI与思维模型【69】——人类误判心理
  • 方案精读:数字政府智慧政务服务一网通办服务解决方案【附全文阅读】
  • 【Oracle专栏】删除用户 释放表空间
  • 架构师面试(三十四):IM 假在线
  • Linux 文件系统目录结构详解
  • 什么是 IDE?集成开发环境的功能与优势
  • 基于springboot+vue的仓库管理系统
  • AWS Linux快速指南:5分钟搭建多用户图形界面
  • 使用 Docker Swarm 纳管节点并实现容器通信
  • 【网络】数据链路层知识梳理
  • Hi3518E官方录像例程源码流程分析(四)
  • 【NLP 62、实践 ⑮、基于RAG + 智谱语言模型的Dota2英雄故事与技能介绍系统】
  • 13【生命周期·进阶】省略规则与静态生命周期 (`‘static`)
  • 08【工具赋能】深入 Cargo:依赖管理、构建配置与工作空间 (Workspace)
  • 一季度浙江实现生产总值22300亿元,同比增长6.0%
  • 第六次国民体质监测展开,高抬腿俯卧撑等新增运动指标受关注
  • 寻找“香奈儿”代工厂
  • 观察|智驾监管升级挤掉宣传水分,行业或加速驶入安全快车道
  • 在没有穹顶的剧院,和春天的音乐会来一场约会
  • 疼痛管理“童”样重要,解读围术期疼痛管理