python Deep learning 学习笔记(1)

Python深度学习笔记 -- 偏重实验

Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别
中(0~9)
神经网络的核心组件是层(layer),它是一种数据处理模块,它从输入数据中提取表示,紧接着的一个例子中,将含有两个Dense 层,它们是密集连接(也叫全连接)的神经层,最后是一个10路的softmax层,它将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率
损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进
优化器(optimizer):基于训练数据和损失函数来更新网络的机制

from keras.datasets import mnist from keras import models from keras import layers from keras.utils import to_categorical # 加载数据 (train_images, train_labels), (test_images, test_labels) = mnist.load_data() print("训练图片个数与尺寸: ", train_images.shape, "标签数: ", len(train_labels)) print("测试图片数量与尺寸: ", test_images.shape, "标签数: ", len(test_labels)) # 网络架构 network = models.Sequential() network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) network.add(layers.Dense(10, activation="softmax")) # 编译 network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 数据预处理,将其变换为网络要求的形状,并缩放到所有值都在 [0, 1] 区间 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 # 对标签进行分类编码 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) # 训练模型,epochs表示训练遍数,batch_size表示每次喂给网络的数据数目 network.fit(train_images, train_labels, epochs=5, batch_size=128) # 检测在测试集上的正确率 test_loss, test_acc = network.evaluate(test_images, test_labels) print('正确率: ', test_acc)

张量是矩阵向任意维度的推广,仅包含一个数字的张量叫作标量,数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴
显示图片

(train_images, train_labels), (test_images, test_labels) = mnist.load_data("/home/fan/dataset/mnist.npz") # 显示第0个数字 import matplotlib.pyplot as plt digit = train_images[0] plt.imshow(digit, cmap=plt.cm.binary) plt.show()

一些数据张量
向量数据: 2D 张量,形状为 (samples, features)
时间序列数据或序列数据: 3D 张量,形状为 (samples, timesteps, features)
图像: 4D 张量,形状为 (samples, height, width, channels) 或 (samples, channels, height, width)
视频: 5D 张量,形状为 (samples, frames, height, width, channels) 或 (samples, frames, channels, height, width)

当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3D 张量中

python Deep learning 学习笔记(1)

根据惯例,时间轴始终是第 2 个轴
图像通常具有三个维度: 高度、宽度和颜色深度
灰度图像只有一个颜色通道,因此可以保存在 2D 张量中
4D张量表示

python Deep learning 学习笔记(1)

图像张量的形状有两种约定: 通道在后(channels-last)的约定(在 TensorFlow 中使用)和通道在前(channels-first)的约定(在 Theano 中使用)。TensorFlow 机器学习框架将颜色深度轴放在最后: (samples, height, width, color_depth),Theano将图像深度轴放在批量轴之后: (samples, color_depth, height, width),Keras 框架同时支持这两种格式
视频数据为 5D 张量,每一帧都可以保存在一个形状为 (height, width, color_depth) 的 3D 张量中,因此一系列帧可以保存在一个形状为 (frames, height, width, color_depth) 的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为(samples, frames, height, width, color_depth)
一个以每秒 4 帧采样的 60 秒 YouTube 视频片段,视频尺寸为 144×256,这个视频共有 240 帧。4 个这样的视频片段组成的批量将保存在形状为 (4, 240, 144, 256, 3)的张量中

如果将两个形状不同的张量相加,较小的张量会被广播(broadcast),以匹配较大张量的形状:

向较小的张量添加轴(叫作广播轴),使其 ndim 与较大的张量相同

将较小的张量沿着新轴重复,使其形状与较大的张量相同

a = np.array([[2, 2], [1, 1]]) c = np.array([3, 3]) print(a + c)

结果为

[[5 5] [4 4]]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdpfg.html