使用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对象。

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

相关推荐
智奇数美3 分钟前
“成本减法”与“效率乘法”——AI智能重构企业通信格局
人工智能·智能手机·信息与通信
技术闲聊DD11 分钟前
机器学习(1)- 机器学习简介
人工智能·机器学习
mwq3012317 分钟前
GPT-2 中的残差权重初始化
人工智能
mwq3012344 分钟前
Transformer : 深度神经网络中的残差连接 (Residual Connection)
人工智能
信田君95271 小时前
瑞莎星瑞(Radxa Orion O6) 基于 Android OS 使用 NPU的图片模糊查找APP 开发
android·人工智能·深度学习·神经网络
StarPrayers.1 小时前
卷积神经网络(CNN)入门实践及Sequential 容器封装
人工智能·pytorch·神经网络·cnn
周末程序猿1 小时前
谈谈上下文工程(Context Engineering)
人工智能
一水鉴天1 小时前
整体设计 逻辑系统程序 之29 拼语言+ CNN 框架核心定位、三阶段程序与三种交换模式配套的方案讨论 之2
人工智能·神经网络·cnn
海森大数据1 小时前
AI破解数学界遗忘谜题:GPT-5重新发现尘封二十年的埃尔德什问题解法
人工智能·gpt