Python + 深度学习从 0 到 1(02 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持!

⭐ Keras 快速入门:

神经网络的基本数据结构是层,你可以将层看作深度学习的乐高积木,Keras等框架则将这种比喻具体化

在 Keras 中,构建深度学习模型就是将相互兼容的多个层拼接在一起,以建立有用的数据变换流程

  • 相同的代码可以在CPU或GPU上无缝切换运行
  • Keras 基于宽松的MIT许可证发布,这意味着可以在商业项目中免费使用它。它与所有版本的Python都兼容
常见层实现代码示例:
  1. 全连接层[fully connected layer] 💜 .Dense
    from keras import layers 
    layer = layers.Dense(32, input_shape=(784,))  # 有32个输出单元的密集层
    
  2. 卷积层[conv layer] 💜 .Conv2D:通常使用 3x3 窗口和步幅 1
    from keras import layers 
    layer = layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))
    
    • input_shape:卷积神经网络接收形状为(image_height, image_width, image_channels)的输入张量(不包括批量维度)
    • padding: 不填充(默认) - “valid”,填充使得输入输出宽&高相等 - “same”
  3. 池化[pooling layer] 💜 .MaxPooling2D:通常使用 2x2 窗口和步幅 2

    作用:1. 减少需要处理的特征图的元素个数;2.使得连续卷积层的观察窗口越来越大

    from keras import layers 
    layer = layers.MaxPooling2D((2, 2))
    

⭐ 实战:手写数字分类: Keras + MNIST 数据集

手写数字分类任务

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

MNIST数据集包含60 000张训练图像和10 000张测试图像,由美国国家标准与技术研究院(National Institute of Standards and Technology,即 MNIST 中的NIST)在20世纪80年代收集得到

  • 样本示例如下:(hint: 显示数据集的第一个数字的代码:plt.imshow(train_images[0], cmap=plt.cm.binary))
💜步骤一 : 加载Keras中的MNIST数据集
from keras.datasets import mnist 
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()  # 包括4个Numpy数组# 准备数据 
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# 准备标签
from keras.utils import to_categorical 
train_labels = to_categorical(train_labels) 
test_labels  = to_categorical(test_labels)
💜步骤二 : 构建网络架构 (两层全连接层为例)
from keras import models 
from keras import layers ## 写法一:利用 Sequential 类定义 model
network = models.Sequential() 
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) 
network.add(layers.Dense(10, activation='softmax'))  # 没指定 input_shape, 则自动匹配上一层## 写法二:利用函数式 API 定义 model
input_tensor = layers.Input(shape=(28 * 28,)) 
x = layers.Dense(32, activation='relu')(input_tensor) 
output_tensor = layers.Dense(10, activation='softmax')(x) 
network = models.Model(inputs=input_tensor, outputs=output_tensor)# model.summary()  # 用来打印查看网络架构 (layer + output shape + param #)

此处我们应用了最常见的(全连接)层的线性堆叠,后续博客会进一步展开其他层的网络拓扑结构如:双分支(two-branch)网络,多头(multihead)网络 和 Inception 模块

💜步骤三: 编译步骤 (optimizer + loss + metrics)
network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
💜步骤四:训练网络
network.fit(train_images, train_labels, epochs=5, batch_size=128,validation_data=(test_images, test_labels))
💜步骤五:测试网络
 test_loss, test_acc = network.evaluate(test_images, test_labels) 

完整代码参考:

from keras.datasets import mnist 
from keras import models 
from keras import layers (train_images, train_labels), (test_images, test_labels) = mnist.load_data()  # 包括4个Numpy数组# 准备数据 
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# 准备标签
from keras.utils import to_categorical  # one-hot 编码
train_labels = to_categorical(train_labels) 
test_labels  = to_categorical(test_labels)# 构建网络架构
network = models.Sequential() 
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) 
network.add(layers.Dense(10, activation='softmax'))# 编译步骤 
# 无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。这一点你无须担心
network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])  ## 对于回归问题: metrics=['mae']# 训练网络
network.fit(train_images, train_labels, epochs=5, batch_size=128)
# history = model.fit(...)
# history_dict = history.history
# history_dict.keys()  ## dict_keys(['val_acc', 'acc', 'val_loss', 'loss']), 可用于可视化训练过程## 预测结果 (代码参考)
#label_predict = network.predict(test_images[0])# 测试网络
test_loss, test_acc = network.evaluate(test_images, test_labels) print("Loss: {}, Acc: {}".format(test_loss, test_acc))

----- 结束后会得到类似如下结果:

Epoch 1/5
469/469 [==============================] - 2s 5ms/step - loss: 0.2598 - accuracy: 0.9253
Epoch 2/5
469/469 [==============================] - 2s 5ms/step - loss: 0.1041 - accuracy: 0.9692
Epoch 3/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0684 - accuracy: 0.9795
Epoch 4/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0492 - accuracy: 0.9848
Epoch 5/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0367 - accuracy: 0.9892
313/313 [==============================] - 0s 702us/step - loss: 0.0665 - accuracy: 0.9803
Loss: 0.06652633100748062, Acc: 0.9803000092506409

参考书籍:Python 深度学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 数据库基础

目录 什么是数据库 数据库分类 关系型数据库 非关系型数据库 SQL子语言 MySQL MySQL 存储数据的组织方式 数据库操作 显示当前数据库 创建数据库 使用数据库 删除数据库 什么是数据库 数据库 是一个用于存储、管理和检索数据的系统,可以组织和保存大量…

《Vue3 二》Vue 的模板语法

在 React 中,想要编写 HTML,是使用 JSX,之后通过 Babel 将 JSX 编译成 React.createElement 函数调用;在 Vue 中,也支持 JSX 的开发模式,但大多数情况下都是使用基于 HTML 的模板语法,在模板中允…

江科大学习笔记之——标准库点亮一个LED灯

控制GPIO就三步 1.RCC时钟使能 2.结构体配置GPIO寄存器 3.控制GPIO值 gpio.c #include "stm32f10x.h" // Device headervoid gpio_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//1.RCC时钟使能GPIO_InitTypeDef GPIO_I…

高级技巧-使用Mysql 实现根据条件过滤整个分组数据

博客-mysql exists实现过滤所属条件对应分组的全部数据 在数据查询中,有时需要根据某一条件来过滤整个分组的数据,尤其是当某条记录满足特定条件时,需要将该组内的所有记录排除。本文将介绍如何使用 MySQL 的 EXISTS 关键字来实现这种分组过滤…

游戏引擎学习第67天

reviewing “apron”概念以更新区域 我们正在进行模拟区域的扩展工作,目标是通过增加一个更大的区域来支持更丰富的互动,尤其是那些可能超出摄像机视野的内容。现有的模拟区域包括摄像机能看到的区域和其周围的环境区域,但为了保证更高效的游…

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…

如何在 Spring Boot 微服务中设置和管理多个数据库

在现代微服务架构中,通常需要与多个数据库交互的服务。这可能是由于各种原因,例如遗留系统集成、不同类型的数据存储需求,或者仅仅是为了优化性能。Spring Boot 具有灵活的配置和强大的数据访问库,可以轻松配置多个数据库。在本综…

【Raven1靶场渗透】

文章目录 一、基础信息 二、信息收集 三、暴力破解 四、提权 一、基础信息 Kali IP :192.168.20.146 靶机IP :192.168.20.153 二、信息收集 nmap -sS -sV -p- -A 192.168.20.153 开放了22,80,111,58305端口 访…

视频监控平台:Liveweb视频汇聚融合平台智慧安防视频监控应用方案

Liveweb是一款功能强大、灵活部署的安防视频监控平台,支持多种主流标准协议,包括GB28181、RTSP/Onvif、RTMP等,同时兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统安防监控功能,还支持接入AI智能分析&#…

【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用

AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CI…

基于PREEvision的UML设计

众所周知,PREEvision是一款强大的电子电气架构协同开发及管理软件,可以很好地帮助架构工程师完成架构开发工作,其功能包括需求管理、定义功能逻辑、系统软件开发、网络设计、线束设计及整体工程的产品线管理和变形管理等。随着工程师们越来越…

闲谭Scala(2)--安装与环境配置

1. 概述 Java开发环境安装,需要两步,第一安装JDK,第二配置环境变量。 Scala的话,也是两步,第一安装Scale环境,第二配置环境变量。 需要注意的是,配置环境变量,主要是想让windows操…

智慧地下采矿:可视化引领未来矿业管理

图扑智慧地下采矿可视化平台通过整合多源数据,提供实时 3D 矿井地图及分析,提升了矿产开采的安全性与效率,为矿业管理提供数据驱动的智能决策支持,推动行业数字化转型。

XXL-TOOL v1.3.2 发布 | Java工具类库

Release Notes 1、【新增】新增工具类模块: Encrypt模块 | 一系列处理编解码、加解密的工具。Net模块 | 一系列处理Web、网络通讯相关的工具。 2、【完善】工具类单测完善;3、【升级】升级依赖版本,如freemarker、junit…等。 部分工具代码…

王鹤棣新剧《大奉打更人》开播 数据亮眼刷新招商纪录

临近年末,各类国产剧集仍频上新,档期竞争格外激烈。而由王鹤棣领衔主演的古装悬疑轻喜剧《大奉打更人》已于12月28日在CCTV-8和腾讯视频同步播出,开播即横扫各大榜单。该剧从定档官宣到开播,热度一路攀升,开播后更是掀…

Java中StopWatch的使用详解

stopWatch 是org.springframework.util 包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比。 在未使用这个工具类之前,如果我们需要统计某段代码的耗时,我们会这样写: public static void main(String[] args…

数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误

文章目录 背景一、步骤1.分析阶段2.查看nginx3.修改用户(也可以修改所有者权限) 背景 故障报错: nginx报错信息: 2024/12/19 15:25:31 [crit, 500299#0: *249 onen0 " /var/lib/nginx/tmp/cient body/0000000001" f…

org.apache.zookeeper.server.quorum.QuorumPeerMain

QuorumPeerMain源代码 package org.apache.zookeeper.server.quorum;import java.io.IOException; import javax.management.JMException; import javax.security.sasl.SaslException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.audi…

在K8S中,如果Pod处于不健康状态如何排查?

在kubernetes中,Pod处于不健康状态可能由多种原因导致。为了排查这个问题,你需要采用一系列步骤来确定问题的根源。下面是一个详细的排查过程: 1. 检查Pod的状态: 使用kubectl get pods命令来查看Pod的当前状态。不健康的Pod可能…