使用TensorFlow训练深度学习模型实战(上)

大家好,尽管大多数关于神经网络的文章都强调数学,而TensorFlow文档则强调使用现成数据集进行快速实现,但将这些资源应用于真实世界数据集是很有挑战性的,很难将数学概念和现成数据集与我的具体用例联系起来。本文旨在提供一个实用的、逐步的教程,介绍如何使用TensorFlow训练深度学习模型,并重点介绍如何将数据集重塑为TensorFlow对象,以便TensorFlow框架能够识别。

本文主要内容包括:

  • 将DataFrame转换为TensorFlow对象

  • 从头开始训练深度学习模型

  • 使用预训练的模型训练深度学习模型

  • 评估、预测和绘制训练后的模型。

安装TensorFlow和其他必需的库

首先,你需要安装TensorFlow。你可以通过在终端或Anaconda中运行以下命令来完成:

python 复制代码
# 安装所需的软件包
!pip install tensorflow
!pip install tensorflow-datasets

安装TensorFlow之后,导入其他必需的库,如Numpy、Matplotlib和Sklearn。

python 复制代码
import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split

from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout

加载数据集

一旦导入了所有必需的库,下一步是获取数据集来搭建模型。TensorFlow允许使用各种输入格式,包括CSV、TXT和图像文件,有些数据集可以从TensorFlow-dataset中导入,这些数据集已准备好用作深度学习模型的输入。然而在许多情况下,数据集是以DataFrame格式而不是TensorFlow对象格式存在的。本文我们将使用Sklearn中的MNIST数据集,其格式为Pandas DataFrame。MNIST数据集广泛用于图像分类任务,包括70000个手写数字的灰度图像,每个图像大小为28x28像素。该数据集被分为60000个训练图像和10000个测试图像。

python 复制代码
from sklearn.datasets import fetch_openml

# 加载MNIST数据集
# mnist = fetch_openml('mnist_784')

# 输出MNIST数据集
print('Dataset type:', type(mnist.data))

# 浏览一下加载的数据集
mnist.data.head()

通过输出DataFrame的前部,我们可以观察到它包含784列,每列代表一个像素。

将DataFrame转换为TensorFlow数据集对象

加载了Pandas DataFrame,注意到TensorFlow不支持Pandas DataFrame作为模型的输入,因此必须将DataFrame转换为可以用于训练或评估模型的张量。这个转换过程确保数据以与TensorFlow API兼容的格式存在,为了将MNIST数据集从DataFrame转换为tf.data.Dataset对象,可以执行以下步骤:

  1. 将数据和目标转换为NumPy数组并对数据进行归一化处理

  2. 使用scikit-learn中的train_test_split将数据集拆分为训练集和测试集

  3. 将训练和测试数据重塑为28x28x1的图像

  4. 使用from_tensor_slices为训练集和测试集创建tf.data.Dataset对象

python 复制代码
def get_dataset(mnist):
    # 加载MNIST数据集
    # mnist = fetch_openml('mnist_784')

    # 将数据和目标转换成numpy数组
    X = mnist.data.astype('float32')
    y = mnist.target.astype('int32')

    # 将数据归一化,使其数值在0和1之间
    X /= 255.0

    # 将数据集分成训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # 将训练数据重塑为28x28x1的图像
    X_train = X_train.values.reshape((-1, 28, 28, 1))
    X_test = X_test.values.reshape((-1, 28, 28, 1))

    # 为训练和测试集创建TensorFlow数据集对象
    train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
    test_dataset = tf.data.Dataset.from_tensor_slices((X_test, y_test))

    # 输出训练和测试集的形状
    print('Training data shape:', X_train.shape)
    print('Training labels shape:', y_train.shape)
    print('Testing data shape:', X_test.shape)
    print('Testing labels shape:', y_test.shape)

    return X_test, y_test, X_train, y_train

再来看一下我们的训练和测试TensorFlow对象:

经过这个过程,原始数据集已经成功转换为形状为(5600,28,28,1)的TensorFlow对象。

经过以上的步骤我们已经完成了实战的前半部分,后文将继续讲解有关定义深度学习模型、训练模型和评估模型的内容。

相关推荐
我爱一条柴ya几秒前
【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
人工智能·ai·ai作画·ai编程·ai写作
静心问道2 分钟前
FLAN-T5:规模化指令微调的语言模型
人工智能·语言模型·自然语言处理
李师兄说大模型2 分钟前
KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
人工智能·深度学习·机器学习·语言模型·自然语言处理·大模型·deepseek
静心问道3 分钟前
SqueezeBERT:计算机视觉能为自然语言处理在高效神经网络方面带来哪些启示?
人工智能·计算机视觉·自然语言处理
Sherlock Ma3 分钟前
百度开源文心一言4.5:论文解读和使用入门
人工智能·百度·自然语言处理·开源·大模型·文心一言·多模态
weisian1518 分钟前
人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
人工智能·语言模型·自然语言处理
DataCastle14 分钟前
第三届Bio-OS AI开源大赛启动会隆重举行
人工智能
后端小肥肠22 分钟前
躺赚必备!RPA+Coze+豆包:公众号自动发文,AI率0%亲测有效(附AI率0%提示词)
人工智能·aigc·coze
摘星编程34 分钟前
CloudBase AI ToolKit实战:从0到1开发一个智能医疗网站
人工智能·腾讯云·ai代码远征季#h5应用·ai医疗应用·cloudbase开发
锅挤39 分钟前
深度学习5(深层神经网络 + 参数和超参数)
人工智能·深度学习·神经网络