【深度学习】(二)深度学习基础(代码实现)

简介: 上一章介绍了机器学习的内容,这一章来了解一下深度学习。深度学习是在机器学习的基础上继续研究得来的,又经过了几十年日日夜夜的科研人员的研究,最终留下一些通用的、经典的算法,下面我们开始学习吧。

开发环境:Python3.9+Tensorflow2.9.1

以经典的**手写数字集MNIST**识别为例,采用**LeNet-5网络**。最简单的网络和数据集,之后的网络将会越来越深,数据集会越来越复杂,做好准备🤣

MNIST数据集是机器学习领域中非常经典的一个数据集,由**60000个训练样本和10000个测试样本**组成,每个样本都是一张**28*28**像素的灰度手写数字图片。

LeNet 是一系列网络的合称,包括LeNet1 - LeNet5,由Yann LeCun 等人在 1990 年《Handwritten Digit Recognition with a Back-Propagation Network》中提出,是**卷积神经网络的 HelloWorld**。

6e003a0150364b7d9d3db7699b4a2399.png

# coding: utf-8# # TensorFlow卷积神经网络(CNN)示例 - 高级API# ### Convolutional Neural Network Example - tf.layers API# ## CNN网络结构图示# # ![CNN](http://personal.ie.cuhk.edu.hk/~ccloy/project_target_code/images/fig3.png)# # ## MNIST数据库# # ![MNIST Dataset](http://neuralnetworksanddeeplearning.com/images/mnist_100_digits.png)# # More info: http://yann.lecun.com/exdb/mnist/from__future__importdivision, print_function, absolute_import# Import MNIST data,MNIST数据集导入fromtensorflow.examples.tutorials.mnistimportinput_datamnist=input_data.read_data_sets("/tmp/data/", one_hot=False)
importtensorflowastfimportmatplotlib.pyplotaspltimportnumpyasnp# Training Parameters,超参数learning_rate=0.001# 学习率num_steps=2000# 训练步数batch_size=128# 训练数据批的大小# Network Parameters,网络参数num_input=784# MNIST数据输入 (img shape: 28*28)num_classes=10# MNIST所有类别 (0-9 digits)dropout=0.75# Dropout, probability to keep units,保留神经元相应的概率# Create the neural network,创建深度神经网络defconv_net(x_dict, n_classes, dropout, reuse, is_training):
# Define a scope for reusing the variables,确定命名空间withtf.variable_scope('ConvNet', reuse=reuse):
# TF Estimator类型的输入为像素x=x_dict['images']
# MNIST数据输入格式为一位向量,包含784个特征 (28*28像素)# 用reshape函数改变形状以匹配图像的尺寸 [高 x 宽 x 通道数]# 输入张量的尺度为四维: [(每一)批数据的数目, 高,宽,通道数]x=tf.reshape(x, shape=[-1, 28, 28, 1])
# 卷积层,32个卷积核,尺寸为5x5conv1=tf.layers.conv2d(x, 32, 5, activation=tf.nn.relu)
# 最大池化层,步长为2,无需学习任何参量conv1=tf.layers.max_pooling2d(conv1, 2, 2)
# 卷积层,32个卷积核,尺寸为5x5conv2=tf.layers.conv2d(conv1, 64, 3, activation=tf.nn.relu)
# 最大池化层,步长为2,无需学习任何参量conv2=tf.layers.max_pooling2d(conv2, 2, 2)
# 展开特征为一维向量,以输入全连接层fc1=tf.contrib.layers.flatten(conv2)
# 全连接层fc1=tf.layers.dense(fc1, 1024)
# 应用Dropout (训练时打开,测试时关闭)fc1=tf.layers.dropout(fc1, rate=dropout, training=is_training)
# 输出层,预测类别out=tf.layers.dense(fc1, n_classes)
returnout# 确定模型功能 (参照TF Estimator模版)defmodel_fn(features, labels, mode):
# 构建神经网络# 因为dropout在训练与测试时的特性不一,我们此处为训练和测试过程创建两个独立但共享权值的计算图logits_train=conv_net(features, num_classes, dropout, reuse=False, is_training=True)
logits_test=conv_net(features, num_classes, dropout, reuse=True, is_training=False)
# 预测pred_classes=tf.argmax(logits_test, axis=1)
pred_probas=tf.nn.softmax(logits_test)
ifmode==tf.estimator.ModeKeys.PREDICT:
returntf.estimator.EstimatorSpec(mode, predictions=pred_classes)
# 确定误差函数与优化器loss_op=tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
logits=logits_train, labels=tf.cast(labels, dtype=tf.int32)))
optimizer=tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op=optimizer.minimize(loss_op, global_step=tf.train.get_global_step())
# 评估模型精确度acc_op=tf.metrics.accuracy(labels=labels, predictions=pred_classes)
# TF Estimators需要返回EstimatorSpecestim_specs=tf.estimator.EstimatorSpec(
mode=mode,
predictions=pred_classes,
loss=loss_op,
train_op=train_op,
eval_metric_ops={'accuracy': acc_op})
returnestim_specsif__name__=="__main__":
# 构建Estimatormodel=tf.estimator.Estimator(model_fn)
# 确定训练输入函数input_fn=tf.estimator.inputs.numpy_input_fn(
x={'images': mnist.train.images}, y=mnist.train.labels,
batch_size=batch_size, num_epochs=None, shuffle=True)
# 开始训练模型model.train(input_fn, steps=num_steps)
# 评判模型# 确定评判用输入函数input_fn=tf.estimator.inputs.numpy_input_fn(
x={'images': mnist.test.images}, y=mnist.test.labels,
batch_size=batch_size, shuffle=False)
model.evaluate(input_fn)
# 预测单个图像n_images=4# 从数据集得到测试图像test_images=mnist.test.images[:n_images]
# 准备输入数据input_fn=tf.estimator.inputs.numpy_input_fn(
x={'images': test_images}, shuffle=False)
# 用训练好的模型预测图片类别preds=list(model.predict(input_fn))
# 可视化显示foriinrange(n_images):
plt.imshow(np.reshape(test_images[i], [28, 28]), cmap='gray')
plt.show()
print("Model prediction:", preds[i])

总结🍟

对于图像处理来说,深度学习只需掌握CNN即可。下一节开始介绍近年来火爆的原始CNN基础上不断改进的神经网络模型,敬请期待🚗

目录
相关文章
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
204 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
128 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
27天前
|
机器学习/深度学习 算法框架/工具 Python
深度学习的奥秘与实践:从理论到代码
本文将探索深度学习的世界,揭示其背后的原理,并分享如何将这些理论应用到实际编程中。我们将一起踏上一段旅程,从神经网络的基础概念出发,逐步深入到复杂的模型训练和优化技术。你将看到,即使是初学者,也可以实现自己的深度学习项目。
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
101 2
|
2月前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码示例
【9月更文挑战第32天】本文将深入探讨深度学习在图像识别领域的应用,包括其原理、技术、优势以及挑战。我们将通过一个简单的代码示例,展示如何使用深度学习技术进行图像识别。无论你是初学者还是有经验的开发者,都可以从中获得启发和帮助。让我们一起探索这个充满无限可能的领域吧!
83 8
|
3月前
|
机器学习/深度学习 算法框架/工具 Python
深度学习在图像识别中的应用及其代码实现
【9月更文挑战第24天】本文将探讨深度学习在图像识别领域的应用,并展示如何通过代码实现这一过程。我们将介绍深度学习的基本原理,以及它在图像识别中的优势和挑战。然后,我们将通过一个简单的代码示例,展示如何使用深度学习进行图像识别。最后,我们将讨论深度学习在未来图像识别中的潜力和可能的发展方向。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】深度学习的概述及应用,附带代码示例
深度学习(Deep Learning,简称DL)是机器学习领域中的一个重要分支,其目标是通过模拟人脑神经网络的工作机制,构建多层次的抽象特征表示,使机器能够自动从原始数据中提取关键信息,从而实现高精度的任务执行。深度学习通过多层神经网络结构及其训练方式,实现了从低级像素级别到高级概念级别的递进式知识层次。 深度学习的主要组件包括输入层、隐藏层和输出层。隐藏层的数量和层数决定了模型的复杂度和表达能力。在训练过程中,权重更新和梯度下降法是关键步骤,目的是最小化损失函数,提高预测精度。深度学习主要基于反向传播算法(BP Algorithm)来优化模型参数,通过正向传播、损失计算、反向传播和梯度下降等
204 8
|
4月前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码实现
【8月更文挑战第3天】深度学习技术在图像识别领域取得了显著的成果,通过构建深度神经网络模型,实现了对复杂图像数据的高效处理和准确识别。本文将介绍深度学习在图像识别中的原理、关键技术及应用实例,并通过代码示例展示如何利用深度学习框架进行图像识别任务的实现。
|
4月前
|
机器学习/深度学习 算法 算法框架/工具
探索深度学习:从理论到代码实现
【8月更文挑战第2天】本文将深入探讨深度学习的核心理论,并通过实际的代码示例来展示这些理论的应用。我们将从基础的神经网络开始,逐步引入更复杂的模型和算法,如卷积神经网络(CNN)和循环神经网络(RNN)。最后,我们将通过一个具体的项目来展示如何将这些理论应用于实际问题。
49 0
|
6月前
|
机器学习/深度学习 算法 安全
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入