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

【人工智能】Python常用库-TensorFlow常用方法教程

TensorFlow 是一个广泛应用的开源深度学习框架,支持多种机器学习任务,如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程,涵盖基础使用方法和示例代码。


1. 安装与导入

安装 TensorFlow:

pip install tensorflow

导入 TensorFlow:

import tensorflow as tf
import numpy as np

验证安装:

print(tf.__version__)  # 查看 TensorFlow 版本

2. TensorFlow 基础

2.1 张量(Tensor)

TensorFlow 的核心数据结构是张量,它是一个多维数组。

# 创建张量
a = tf.constant([1, 2, 3], dtype=tf.float32)  # 常量张量
b = tf.Variable([4, 5, 6], dtype=tf.float32)  # 可变张量# 基本运算
c = a + b
print(c.numpy())  # 转换为 NumPy 数组输出

输出结果

[5. 7. 9.]
2.2 自动求导

TensorFlow 支持自动计算梯度。

x = tf.Variable(3.0)with tf.GradientTape() as tape:y = x**2  # 定义目标函数dy_dx = tape.gradient(y, x)  # 自动求导
print(dy_dx.numpy())

输出结果

6.0

3. 构建模型

3.1 使用 Sequential API
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense# 构建简单神经网络
model = Sequential([Dense(64, activation='relu', input_shape=(10,)),Dense(32, activation='relu'),Dense(1, activation='sigmoid')
])# 查看模型结构
model.summary()

输出结果

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================dense (Dense)               (None, 64)                704       dense_1 (Dense)             (None, 32)                2080      dense_2 (Dense)             (None, 1)                 33        =================================================================
Total params: 2,817
Trainable params: 2,817
Non-trainable params: 0
_________________________________________________________________
3.2 自定义模型
import tensorflow as tf
from tensorflow.keras.layers import Denseclass MyModel(tf.keras.Model):def __init__(self):super(MyModel, self).__init__()self.dense1 = Dense(64, activation='relu')self.dense2 = Dense(32, activation='relu')self.output_layer = Dense(1, activation='sigmoid')def call(self, inputs):x = self.dense1(inputs)x = self.dense2(x)return self.output_layer(x)model = MyModel()input_shape = (None, 128, 128, 3)
model.build(input_shape)
model.summary()

输出结果

Model: "my_model"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================dense (Dense)               multiple                  256       dense_1 (Dense)             multiple                  2080      dense_2 (Dense)             multiple                  33        =================================================================
Total params: 2,369
Trainable params: 2,369
Non-trainable params: 0
_________________________________________________________________

4. 数据处理

4.1 数据加载
from tensorflow.keras.datasets import mnist# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理
x_train = x_train / 255.0  # 归一化
x_test = x_test / 255.0
x_train = x_train.reshape(-1, 28*28)  # 展平
x_test = x_test.reshape(-1, 28*28)
4.2 创建数据管道
# 使用 Dataset API 创建数据管道
dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
dataset = dataset.shuffle(10000).batch(32).prefetch(tf.data.AUTOTUNE)

5. 模型训练与评估

5.1 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
5.2 训练模型
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
 5.3 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")

完整代码

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import mnist# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理:归一化到 [0, 1]
x_train = x_train / 255.0
x_test = x_test / 255.0# 构建模型
model = Sequential([Flatten(input_shape=(28, 28)),  # 将28x28的图像展平为1维Dense(128, activation='relu'),  # 全连接层,128个神经元Dense(10, activation='softmax')  # 输出层,10个类别
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 模型训练
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)# 模型评估
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")

输出结果

Epoch 1/10
1500/1500 [==============================] - 3s 2ms/step - loss: 0.2894 - accuracy: 0.9178 - val_loss: 0.1607 - val_accuracy: 0.9547
Epoch 2/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.1301 - accuracy: 0.9614 - val_loss: 0.1131 - val_accuracy: 0.9656
Epoch 3/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0875 - accuracy: 0.9736 - val_loss: 0.1000 - val_accuracy: 0.9683
Epoch 4/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0658 - accuracy: 0.9804 - val_loss: 0.0934 - val_accuracy: 0.9728
Epoch 5/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0506 - accuracy: 0.9852 - val_loss: 0.0893 - val_accuracy: 0.9715
Epoch 6/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0397 - accuracy: 0.9878 - val_loss: 0.0908 - val_accuracy: 0.9731
Epoch 7/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0311 - accuracy: 0.9906 - val_loss: 0.0882 - val_accuracy: 0.9749
Epoch 8/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0251 - accuracy: 0.9924 - val_loss: 0.0801 - val_accuracy: 0.9777
Epoch 9/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0196 - accuracy: 0.9945 - val_loss: 0.0866 - val_accuracy: 0.9755
Epoch 10/10
1500/1500 [==============================] - 2s 1ms/step - loss: 0.0166 - accuracy: 0.9949 - val_loss: 0.0980 - val_accuracy: 0.9735
313/313 [==============================] - 0s 863us/step - loss: 0.0886 - accuracy: 0.9758
Test accuracy: 0.9757999777793884

代码说明

  1. 数据加载与预处理

    • mnist.load_data():加载手写数字数据集。
    • 数据归一化:将像素值从 0-255 归一化到 0-1,有助于加速训练。
  2. 模型构建

    • Flatten 层:将二维的图像数据展平为一维数组,便于输入全连接层。
    • Dense 层:
      • 第一层使用 ReLU 激活函数。
      • 第二层是输出层,使用 Softmax 激活函数,用于多分类任务。
  3. 模型编译

    • 优化器:adam 是一种适用于大多数情况的优化算法。
    • 损失函数:sparse_categorical_crossentropy,用于分类任务。
  4. 训练

    • validation_split=0.2:从训练数据中划分 20% 用作验证集。
    • epochs=10:训练 10 个轮次。
  5. 评估

    • model.evaluate():评估模型在测试集上的性能,返回损失值和准确率。

6. 可视化

6.1 绘制训练过程
import matplotlib.pyplot as plt# 绘制训练与验证准确率
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.title('Accuracy over Epochs')
plt.show()
6.2 绘制模型预测
# 显示预测结果
predictions = model.predict(x_test[:10])
print("Predicted labels:", np.argmax(predictions, axis=1))
print("True labels:", y_test[:10])

输出结果

Predicted labels: [7 2 1 0 4 1 4 9 5 9]
True labels: [7 2 1 0 4 1 4 9 5 9]

7. 高级功能

7.1 保存与加载模型
# 保存模型
model.save('my_model.h5')# 加载模型
loaded_model = tf.keras.models.load_model('my_model.h5')
7.2 自定义训练过程
optimizer = tf.keras.optimizers.Adam()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy()for epoch in range(5):for x_batch, y_batch in dataset:with tf.GradientTape() as tape:predictions = model(x_batch, training=True)loss = loss_fn(y_batch, predictions)gradients = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(gradients, model.trainable_variables))print(f"Epoch {epoch+1} Loss: {loss.numpy()}")

完整代码 

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 将标签二值化(偶数为 1,奇数为 0)
y_train = (y_train % 2 == 0).astype(int)
y_test = (y_test % 2 == 0).astype(int)# 数据预处理
x_train = x_train / 255.0  # 归一化
x_test = x_test / 255.0
x_train = x_train.reshape(-1, 28 * 28)  # 展平
x_test = x_test.reshape(-1, 28 * 28)# 使用 Dataset API 创建数据管道
dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
dataset = dataset.shuffle(10000).batch(32).prefetch(tf.data.AUTOTUNE)# 定义模型
class MyModel(tf.keras.Model):def __init__(self):super(MyModel, self).__init__()self.dense1 = Dense(64, activation='relu')self.dense2 = Dense(32, activation='relu')self.output_layer = Dense(1, activation='sigmoid')  # 输出单个概率def call(self, inputs):x = self.dense1(inputs)x = self.dense2(x)return self.output_layer(x)model = MyModel()# 自定义训练模型# 优化器和损失函数
optimizer = tf.keras.optimizers.Adam()
loss_fn = tf.keras.losses.BinaryCrossentropy()# 模型训练
for epoch in range(5):for x_batch, y_batch in dataset:with tf.GradientTape() as tape:predictions = model(x_batch, training=True)loss = loss_fn(y_batch, predictions)  # 使用二分类损失函数gradients = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(gradients, model.trainable_variables))print(f"Epoch {epoch + 1} Loss: {loss.numpy()}")

输出结果

Epoch 1 Loss: 0.14392520487308502
Epoch 2 Loss: 0.013877220451831818
Epoch 3 Loss: 0.006577217951416969
Epoch 4 Loss: 0.004411072935909033
Epoch 5 Loss: 0.0037908260710537434

8. 实际应用案例

8.1 图像分类
from tensorflow.keras.datasets import fashion_mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Dense
from tensorflow.keras import Sequential# 加载数据集
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()# 数据预处理
x_train, x_test = x_train / 255.0, x_test / 255.0
y_train, y_test = to_categorical(y_train), to_categorical(y_test)# 模型构建与训练
model = Sequential([Dense(128, activation='relu', input_shape=(28*28,)),Dense(64, activation='relu'),Dense(10, activation='softmax')
])model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train.reshape(-1, 28*28), y_train, epochs=5, batch_size=32, validation_split=0.2)

输出结果

Epoch 1/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.5128 - accuracy: 0.8172 - val_loss: 0.3955 - val_accuracy: 0.8561
Epoch 2/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3794 - accuracy: 0.8621 - val_loss: 0.3925 - val_accuracy: 0.8546
Epoch 3/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3403 - accuracy: 0.8741 - val_loss: 0.3721 - val_accuracy: 0.8661
Epoch 4/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3158 - accuracy: 0.8826 - val_loss: 0.3390 - val_accuracy: 0.8767
Epoch 5/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.3011 - accuracy: 0.8883 - val_loss: 0.3292 - val_accuracy: 0.8790

总结

TensorFlow 提供了从数据处理到模型训练和部署的完整解决方案。其灵活的 API 和强大的功能使得研究人员和工程师可以快速实现复杂的机器学习和深度学习任务。通过不断实践,可以深入了解 TensorFlow 的更多特性。

相关文章:

【人工智能】Python常用库-TensorFlow常用方法教程

TensorFlow 是一个广泛应用的开源深度学习框架,支持多种机器学习任务,如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程,涵盖基础使用方法和示例代码。 1. 安装与导入 安装 TensorFlow: pip install tensorflow…...

微信小程序按字母顺序渲染城市 功能实现详细讲解

在微信小程序功能搭建中,按字母渲染城市会用到多个ES6的方法,如reduce,map,Object.entries(),Object.keys() ,需要组合熟练掌握,才能优雅的处理数据完成渲染。 目录 一、数据分析 二、数据处理 …...

23省赛区块链应用与维护(房屋租凭【下】)

23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...

数据结构-图-领接表存储

一、了解图的领接表存储 1、定义与结构 定义:邻接表是图的一种链式存储结构,它通过链表将每个顶点与其相邻的顶点连接起来。 结构: 顶点表:通常使用一个数组来存储图的顶点信息,数组的每个元素对应一个顶点&#xff…...

快速入门web安全

一.确定初衷 1.我真的喜欢搞安全吗? 2.我只是想通过安全赚钱钱吗? 3.我不知道做什么就是随便。 4.一辈子做信息安全吗 这些不想清楚会对你以后的发展很不利,与其盲目的学习web安全,不如先做一个长远的计划。 否则在我看来都是浪费时间。如果你考虑好了…...

rabbitMq两种消费应答失败处理方式

在rabbitMq消费端,有三种应答模式: none:不处理。即消息投递给消费者后立刻 ack 消息会立刻从MQ删除。非常不安全,不建议使用 manual:手动模式。需要自己在业务代码中调用api,发送 ack 或 reject&#xff…...

Qt C++(一) 5.12安装+运行第一个项目

安装 1. Download Qt OSS: Get Qt Online Installer 在该链接中下载qt在线安装程序 2. 安装时候,注意关键一步,archive是存档的意思,可以找到旧的版本, 比如5.12 3. 注意组件没必要全选,否则需要安装50个g, 经过请教…...

【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】

文章目录 RISC-V Debug调试用例支持的功能限制和不包括的内容RISC-V 调试架构的主要组件用户与调试主机调试翻译器调试传输硬件调试传输模块(DTM)调试模块(DM)调试功能触发模块版本介绍RISC-V Debug RISC-V 调试规范为 RISC-V 处理器提供了一套标准化的调试接口和功能,旨…...

使用Gradle编译前端的项目

使用Gradle编译前端的项目 前言项目结构根项目(parent-project)的 settings.gradle.kts后端项目(backend)的 build.gradle.kts前端项目(frontend)的 build.gradle.kts打包bootJar 前言 最近的项目都是使用…...

网络爬虫——常见问题与调试技巧

在开发网络爬虫的过程中,开发者常常会遇到各种问题,例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案,详细介绍解决常见错误的方法,以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…...

【AI绘画】Midjourney进阶:色调详解(下)

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调纯色调灰色调暗色调 &#x1f4af…...

springboot+redis+lua实现分布式锁

1 分布式锁 Java锁能保证一个JVM进程里多个线程交替使用资源。而分布式锁保证多个JVM进程有序交替使用资源,保证数据的完整性和一致性。 分布式锁要求 互斥。一个资源在某个时刻只能被一个线程访问。避免死锁。避免某个线程异常情况不释放资源,造成死锁…...

【Petri网导论学习笔记】Petri网导论入门学习(十一) —— 3.3 变迁发生序列与Petri网语言

目录 3.3 变迁发生序列与Petri网语言定义 3.4定义 3.5定义 3.6定理 3.5例 3.9定义 3.7例 3.10定理 3.6定理 3.7 有界Petri网泵引理推论 3.5定义 3.9定理 3.8定义 3.10定义 3.11定义 3.12定理 3.93.3 变迁发生序列与Petri网语言 对于 Petri 网进行分析的另一种方法是考察网系统…...

docker-compose文件的简介及使用

Docker Compose是Docker官方的开源项目,主要用于定义和运行多容器Docker应用。以下是对Docker Compose的详细介绍: 一、主要功能: 容器编排:Docker Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML格…...

[护网杯 2018]easy_tornado

这里有一个hint点进去看看,他说md5(cookie_secretmd5(filename)),所以我们需要获得cookie_secret的value 根据题目tornado,它可能是tornado的SSTI 这里吧filehash改为NULL. 是tornado的SSTI 输入{{handler.settings}} (settings 属性是一个字典&am…...

基于STM32的智能风扇控制系统

基于STM32的智能风扇控制系统 持续更新,欢迎关注!!! ** 基于STM32的智能风扇控制系统 ** 近几年,我国电风扇市场发展迅速,产品产出持续扩张,国家产业政策鼓励电风扇产业向高技术产品方向发展,国内企业新增投资项目投…...

决策树——基于乳腺癌数据集与cpu数据集实现

决策树——乳腺癌数据实现 4.1 训练决策树模型,并计算测试集的准确率 1. 读入数据 from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix …...

探索空间自相关:揭示地理数据中的隐藏模式

目录 一、什么是空间自相关? 类型 二、空间自相关的数学基础 空间加权矩阵 三、度量空间自相关的方法 1. 全局自相关 2. 局部自相关 四、空间自相关的实际应用 五、Python实现空间自相关分析 1. 数据准备 2. 计算莫兰指数 3. 局部自相关(LISA 分析&…...

echarts使用示例

柱状图折线图 折柱混合:https://echarts.apache.org/examples/zh/editor.html?cmix-line-bar option {title:{show: true},tooltip: {trigger: axis,axisPointer: {type: cross,crossStyle: {color: #999}}},toolbox: {feature: {dataView: { show: true, readOnl…...

Flink高可用配置(HA)

从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...