Pytorch基础——张量

秩、轴和形状是深度学习中使用张量时最为关注的张量属性。这三个概念是相互建立的,从秩开始,然后是轴,最后是形状。

张量的秩指张量中存在的维数,假设又一个秩为2的张量,这意味着下列情况:

  • 我们有一个矩阵
  • 我们有一个2维数组
  • 我们有一个2维张量

一个张量的秩告诉我们需要多少个索引来访问或者引用张量数据结构中包含的特定数据元素

张量的轴是张量的一个特定的维数,如果一个张量是二阶张量,意味着该张量又两个轴,张量中的元素被认为是沿着轴运动的,这个运动会受到每个轴长度的限制。每个轴的长度会告诉我们沿轴有多少索引。

张量的形状由每个轴的长度决定

例如:

dd = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

t = torch.tensor(dd)
print(t)
print(t.shape)
输出:
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
torch.Size([3, 3])

上例可以看到张量t的形状为3*3,秩为形状的长度

当张量在深度学习网络中流动时,会遇有特定形状的不同的点,我们需要了解网络中即将到来的形状,并将张量进行重塑

将上诉例子3*3的张量重塑成1*9

print(t.reshape(1, 9))
print(t.reshape(1, 9).shape)
输出:
tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
torch.Size([1, 9])

在重塑时分量值的乘积必须等于张量中元素的总数

Pytorch的安装

安装pytorch==1.5.0,cuda=10.1

pip安装方式:

pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html

conda安装方式:

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

验证输入:

import torch
print(torch.__version__)
print(torch.cuda.is_available())//是否支持gpu加速
print(torch.version.cuda)

输出:

1.5.0+cu101
True
10.1

TensorFlow2.0官方教程复现笔记——初识TensorFlow

下载并安装 TensorFlow 2.0 测试版包。将 TensorFlow 载入你的程序:

# 载入tensorflow
import tensorflow as tf

载入并准备好 MNIST 数据集

# # 载入mnist数据集
mnist = tf.keras.datasets.mnist

如果下载mnist数据集失败可以手动导入,我将keras自带的datasets所有数据都下载下来了,下载网盘地址为

链接:https://pan.baidu.com/s/1D33j1kouqPtRQHFR_9o-fg
提取码:j283

将mnist数据集解压放在C:\Users\用户名\.keras\datasets\mnist下,其目录结构如下:

然后使用上面代码导入数据集,将数据集划分为训练集和测试集,并将样本从整数转换为浮点数(归一化->[0,1])

# 划分训练集,测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将图片归一化->[0,1]
x_train, x_test = x_train / 255.0, x_test / 255.0

将模型的各层堆叠起来,以搭建 tf.keras.Sequential 模型。为训练选择优化器和损失函数:

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

训练并验证模型:

model.fit(x_train, y_train, batch_size=60000, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

使用batch_size=60000怎么也跑不到官网教程给的98%准确率,运行结果如下

batch_size=60000运行结果

使用batch_size=50能达到98%准确率,运行结果如下

batch_size=50运行结果

附录:完整代码

# -*- coding: utf-8 -*-
# @Time    : 2020/4/19 16:15
# @Author  : tone

# 载入tensorflow
import tensorflow as tf

# # 载入mnist数据集
mnist = tf.keras.datasets.mnist
import tensorflow as tf

# 划分训练集,测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将图片归一化->[0,1]
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=50, epochs=5)
score = model.evaluate(x_test, y_test, verbose=2)
print(score)