数据集:ImageNet数据集

Keras库是用于深度卷积神经网络常用的库

基础概念(未了解)

  1. 张量
  2. 张量运算
  3. 微分
  4. 梯度下降

基础知识:

  1. 分类问题中的某个类别叫做,数据点叫做样本,某个样本对应的类叫做标签

  2. 张量

    张量:数字的容器,张量的维度叫做轴
    标量(0D张量):仅包含一个数字的张量叫做标量,如:3,5
    向量(1D张量):一位数组叫做向量(vector)或称为一维张量
    矩阵(2D张量):即二维数组

    张量的三个关键属性:

    • 轴的个数:3D张量3个轴,矩阵2个轴
    • 形状:如矩阵形状为(3,5),表示3*5的二维数组
    • 数据类型
  1. 张量的广播
    如果将两个形状不同的张量相加,较小的张量会被广播,以匹配较大的张量

    • 向较小的张量添加轴(广播轴),使其ndim与较大的张量想同
    • 沿轴将较小张量重复,使得形状想同

  2. 层是一个数据处理模块,将输入的张量转换成一个活多个输出张量
    不同张量格式与不同数据处理类型需要不同的层:
    构建深度模型就是将相互兼容的多个层拼接在一起,以建立有用的数据变换流程

    1. 简单向量数据保存再2D张量中,通常用密集连接层即全连接层(dense layer),对应keras中的Dense类
    2. 序列数据保存在3D张量中,通常用循环层,keras中的LSTM层
    3. 图像数据保存再4D张量中,通常用二维卷积层,keras中的Conv2D
  3. 深度学习模型是层构成的有向无环图

  4. 选择目标函数来使损失尽可能最小化是有一些指导原则的:

    • 对于二分类问题可以使用二元交叉熵损失函数
    • 多分类问题可以使用分类交叉熵损失函数
    • 回归问题可以用均方误差损失函数
    • 序列学习可以用联结主义时序分类损失函数
  5. 回归问题是机器学习中常见的一类问题,它主要是预测一个连续值而不是离散的标签,比如预测气温等

  6. Dense层(密集连接层)和Conv2D层(卷积层)的根本区别:

    • Dense学到: 全局模式即涉及所有像素的模式
    • Conv2D学到:局部模式即输入图像的二维小窗口发现的模式,如3x3小窗口,俗化讲就是从整体图像的不同局部获取到的信息
    • Conv2D学到的具有以下几个性质:
      • 平移不变性(从局部学到后可以在任何地方识别这个模式)
      • 模式的空间层次结构:第一层卷积学到较小的局部模式,第二次卷积学到由第一层学习组合而成的更大模式,以此类推,就像堆积木一样

未知概念,需要查阅

  1. 网络拓扑结构:
    • 双分支网络
    • 多头网络
    • Inception模块
  2. sdd

有效经验

  1. 样本少则应该使用小网络,训练样本少,过拟合会越严重,较小的网络可以降低过拟合。

数据标准化:

标准化是对数据进行清洗,为什么要清洗?因为很可能不同特征值差异很大,有的在01波动,有的在1001000波动,这种差异很大的特征值会非常影响训练效果。

具体方法:

学习手写数字识别

目标:使用python的keras库来完成手写数字分类

1. 将手写数字的灰度图像(28 像素×28 像素)划分到 10 个类别中(0~9)

2. 使用MNIST 数据集(60000 张训练图像 和 10000 张测试图

准备阶段:

  • 下载数据集

  • 安装keras库

实践:

1. 安装keras库:

python -m pip install keras

2. 下载数据集

from torchvision import datasets

train_data = datasets.MNIST(root='./', train=True, download=True)
test_data = datasets.MNIST(root='./', train=False, download=True)

3. 加载本地数据

import numpy as np
from keras.utils import np_utils
import gzip
import os

# Define file paths
train_images_path = './mnist_data/train-images-idx3-ubyte.gz'
train_labels_path = './mnist_data/train-labels-idx1-ubyte.gz'
test_images_path = './mnist_data/t10k-images-idx3-ubyte.gz'
test_labels_path = './mnist_data/t10k-labels-idx1-ubyte.gz'

def load_mnist_images(file_path):
    with gzip.open(file_path, 'rb') as f:
        # Skip the magic number and dimensions
        f.read(16)
        # Read the image data
        images = np.frombuffer(f.read(), dtype=np.uint8).astype(np.float32)
        images = images.reshape(-1, 28, 28)
        images /= 255.0  # Normalize to [0, 1]
    return images

def load_mnist_labels(file_path):
    with gzip.open(file_path, 'rb') as f:
        # Skip the magic number
        f.read(8)
        # Read the label data
        labels = np.frombuffer(f.read(), dtype=np.uint8)
    return labels

# Load data
train_images = load_mnist_images(train_images_path)
train_labels = load_mnist_labels(train_labels_path)
test_images = load_mnist_images(test_images_path)
test_labels = load_mnist_labels(test_labels_path)

# Convert labels to one-hot encoding
train_labels = np_utils.to_categorical(train_labels, 10)
test_labels = np_utils.to_categorical(test_labels, 10)

print(f"Training data shape: {train_images.shape}")
print(f"Training labels shape: {train_labels.shape}")
print(f"Training labels labels: {train_labels}")
print(f"Test data shape: {test_images.shape}")
print(f"Test labels shape: {test_labels.shape}")

4. 开始训练

  • 将训练数据输入到神经网络
  • 网络学习,关联图像和标签
  • 对测试集生成预测,人工验证预测是否准确
作者:admin  创建时间:2024-07-30 15:52
最后编辑:admin  更新时间:2024-11-14 09:20