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

文章目录

一、TensorFlow安装

bash 复制代码
# 1、非GPU版本安装
pip3 install tensorflow==2.3.0

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

二、张量、变量及其操作

1、张量Tensor

python 复制代码
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、变量

python 复制代码
# 变量
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构建我们的模型

python 复制代码
# 绘图工具
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构建

python 复制代码
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

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

model.summary()

2、function api方式构建

python 复制代码
# 使用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子类构建方式

python 复制代码
# 使用Model子类的方式构建神经网络
import tensorflow as tf

class MyModel(tf.keras.Model):
    # 在init方法中定义网络的层结构
    def __init__(self):
        super(MyModel, self).__init__()
        # 第一层:激活函数为relu,权重初始化为he_normal
        self.layer1 = tf.keras.layers.Dense(3, activation='relu', kernel_initializer='he_normal', name='layer1', input_shape=(3,))
        # 第二层:激活函数为relu,权重初始化为he_normal
        self.layer2 = tf.keras.layers.Dense(2, activation='relu', kernel_initializer='he_normal', name='layer2')
        # 第三次:激活函数为sigmoid,权重初始化为he_normal
        self.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、神经网络的优缺点

相关推荐
亚力山大抵17 分钟前
实验2 python的TCP群聊系统实现
服务器·python·tcp/ip
想学好英文的ikun21 分钟前
【MCP】第二篇:IDE革命——用MCP构建下一代智能工具链
ide·人工智能·python·ai·个人开发·mcp
凌叁儿25 分钟前
从零开始搭建Django博客③--前端界面实现
前端·python·django
穆易青43 分钟前
2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器
python·信息可视化·数据分析·ordering·visualisation
码上飞扬44 分钟前
深度剖析:GPT-3.5与GPT-4的主要区别及架构解析
人工智能
whuzhang161 小时前
3DGS之齐次坐标
人工智能·3d·自动驾驶
DKPT1 小时前
正则表达式与python使用
笔记·python·学习·面试·正则表达式
闭月之泪舞1 小时前
《深度神经网络之数据增强、模型保存、模型调用、学习率调整》
人工智能·学习·dnn
LouisCanBe1 小时前
Python 环境管理工具选择与安装实践:Conda 与 uv
linux·python
掘金詹姆斯1 小时前
LangChain4j快速入门(一)
人工智能·langchain