前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python深度学习精华笔记1:深度学习中的数学基础和张量操作

Python深度学习精华笔记1:深度学习中的数学基础和张量操作

原创
作者头像
皮大大
发布2023-08-29 00:13:42
2380
发布2023-08-29 00:13:42
举报
文章被收录于专栏:机器学习/数据可视化

公众号:机器学习杂货店 作者:Peter 编辑:Peter

持续更新《Python深度学习》一书的精华内容,仅作为学习笔记分享。

本文是第一篇:深度学习中的数学基础和张量操作

In 1:

代码语言:txt
复制
import pandas as pd
import numpy as np

import tensorflow as tf

加载MNIST数据集

MNIST数据集是一个大型的手写数字识别数据集,由美国国家标准技术研究所(NIST)收集并公开提供。该数据集包含约70000张手写数字图像,每张图像都是28x28像素大小的,灰度模式。

这些图像分为两个部分:训练集和测试集。训练集包含60000张图像,用于训练和调整模型参数;测试集包含10000张图像,用于评估模型的性能。

MNIST数据集是机器学习领域中非常常用的的一种数据集,特别是对于初学者来说。它是一个很好的起点,可以用来了解和比较各种机器学习算法的性能,例如神经网络、支持向量机、决策树等。通过训练和测试,可以评估各种算法在手写数字识别任务上的性能,以及它们的泛化能力。

In 2:

代码语言:txt
复制
from keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

查看数据基本信息:

In 3:

代码语言:txt
复制
train_images.shape

Out3:

代码语言:txt
复制
(60000, 28, 28)

In 4:

代码语言:txt
复制
train_labels.shape

Out4:

代码语言:txt
复制
(60000,)

In 5:

代码语言:txt
复制
test_images.shape

Out5:

代码语言:txt
复制
(10000, 28, 28)

In 6:

代码语言:txt
复制
test_labels.shape

Out6:

代码语言:txt
复制
(10000,)

显示数字图像

In 7:

代码语言:txt
复制
digit = train_images[9]
digit[:5]

Out7:

代码语言:txt
复制
array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   0, 189, 190,   0,   0,
          0,   0]], dtype=uint8)

In 8:

代码语言:txt
复制
import matplotlib.pyplot as plt

plt.imshow(digit, cmap=plt.cm.binary)
plt.show()

准备图像数据

数据缩放(除以255)和数据类型转化,神经网络只能处理浮点数类型数据float32

In 9:

代码语言:txt
复制
train_images = train_images.reshape((60000, 28*28))
train_images = train_images.astype("float32") / 255

test_images = test_images.reshape((10000, 28*28))
test_images = test_images.astype("float32") / 255

标签分类(有修改)

In 10:

代码语言:txt
复制
# 标签实施独热码to_categorical

# 原文
# from keras.utils import to_categorical

# 修改
from tensorflow.keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

In 11:

代码语言:txt
复制
train_labels

Out11:

代码语言:txt
复制
array([[0., 0., 0., ..., 0., 0., 0.],
       [1., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 1., 0.]], dtype=float32)

构建网络架构

In 12:

代码语言:txt
复制
from keras import models
from keras import layers

network = models.Sequential()  # 实例化
# 添加两个全连接层(密集连接层):Dense层
network.add(layers.Dense(512,  
                         activation='relu',
                         input_shape=(28*28, )))  # input_shape的第一个参数如何确定
# 第二个全连接层:softmax层,返回10个概率值,总和为1
network.add(layers.Dense(10,activation='softmax')) 

编译网络模型

In 13:

代码语言:txt
复制
network.compile(optimizer="rmsprop",   # 优化器
                loss="categorical_crossentropy",  #  损失函数
                metrics=["accuracy"]   # 评价指标:分类精度
               )

模型拟合fit

In 14:

代码语言:txt
复制
network.fit(train_images, 
            train_labels, 
            epochs=5,
            batch_size=128)
Epoch 1/5
469/469 [==============================] - 2s 4ms/step - loss: 0.2650 - accuracy: 0.9227
Epoch 2/5
469/469 [==============================] - 2s 4ms/step - loss: 0.1075 - accuracy: 0.9688
Epoch 3/5
469/469 [==============================] - 2s 4ms/step - loss: 0.0714 - accuracy: 0.9780
Epoch 4/5
469/469 [==============================] - 2s 4ms/step - loss: 0.0524 - accuracy: 0.9844
Epoch 5/5
469/469 [==============================] - 2s 4ms/step - loss: 0.0403 - accuracy: 0.9881

Out14:

代码语言:txt
复制
<keras.callbacks.History at 0x24660809d60>

显示了网络在训练数据上的损失loss和精度accuracy

模型评价

In 15:

代码语言:txt
复制
test_loss, test_acc = network.evaluate(test_images, test_labels)
313/313 [==============================] - 0s 863us/step - loss: 0.0685 - accuracy: 0.9788

模型在训练集上表现得很好,但是在测试集上性能表现得要差些,这种现象称之为过拟合

神经网络的数据张量

标量-0D张量

In 16:

代码语言:txt
复制
# 仅仅包含单个数字,包含0个轴(ndim)
import numpy as np

x = np.array(12)
x

Out16:

代码语言:txt
复制
array(12)

In 17:

代码语言:txt
复制
x.ndim     # 查看轴的个数,称之为rank

Out17:

代码语言:txt
复制
0

In 18:

代码语言:txt
复制
x.size   # 表示张量中的元素个数

Out18:

代码语言:txt
复制
1

向量-1D张量

In 19:

代码语言:txt
复制
x = np.array([9,8,1,12])
x

Out19:

代码语言:txt
复制
array([ 9,  8,  1, 12])

In 20:

代码语言:txt
复制
x.ndim

Out20:

代码语言:txt
复制
1

In 21:

代码语言:txt
复制
x.size

Out21:

代码语言:txt
复制
4

矩阵-2D张量

In 22:

代码语言:txt
复制
x = np.array([[9,8,1,12],
              [2,3,4,5],
              [10,5,2,7]
             ])
x

Out22:

代码语言:txt
复制
array([[ 9,  8,  1, 12],
       [ 2,  3,  4,  5],
       [10,  5,  2,  7]])

In 23:

代码语言:txt
复制
x.ndim

Out23:

代码语言:txt
复制
2

In 24:

代码语言:txt
复制
x.size

Out24:

代码语言:txt
复制
12

关键属性

In 25:

代码语言:txt
复制
# 1、轴的个数ndim

x.ndim

Out25:

代码语言:txt
复制
2

In 26:

代码语言:txt
复制
# 2、形状shape

x.shape

Out26:

代码语言:txt
复制
(3, 4)

In 27:

代码语言:txt
复制
# 3、数据类型

x.dtype

Out27:

代码语言:txt
复制
dtype('int32')

In 28:

代码语言:txt
复制
# 4、元素个数size

x.size

Out28:

代码语言:txt
复制
12

现实数据中的张量

  • 向量:2D, (samples, features)
  • 时间序列数据:3D, (samples, timesteps, features)
  • 图像:4D,(smaples, height, width, channels) or (samples, channels, height, width)
  • 视频: 5D,(smaples, frames,height, width, channels) or (samples, frames,channels, height, width)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载MNIST数据集
  • 显示数字图像
  • 准备图像数据
  • 标签分类(有修改)
  • 构建网络架构
  • 编译网络模型
  • 模型拟合fit
  • 模型评价
  • 神经网络的数据张量
    • 标量-0D张量
      • 向量-1D张量
        • 矩阵-2D张量
          • 关键属性
            • 现实数据中的张量
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档