Numpy入门(5)—应用举例

news2025/1/12 20:36:58

NumPy应用举例

5.1 计算激活函数Sigmoid和ReLU

使用ndarray数组可以很方便的构建数学函数,并利用其底层的矢量计算能力快速实现计算。下面以神经网络中比较常用激活函数Sigmoid和ReLU为例,介绍代码实现过程。

  • 计算Sigmoid激活函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgbdQ5CJ-1692696592219)(file:///Users/zhoupeng/Documents/其他/学习/techology/AI/assets/2023-08-21-18-35-10-image.png)]

  • 计算ReLU激活函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JervLS0f-1692696592220)(file:///Users/zhoupeng/Documents/其他/学习/techology/AI/assets/2023-08-21-18-35-21-image.png)]

使用Numpy计算激活函数Sigmoid和ReLU的值,使用matplotlib画出图形,代码如下所示。

# ReLU和Sigmoid激活函数示意图
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.patches as patches

#设置图片大小
plt.figure(figsize=(8, 3))

# x是1维数组,数组大小是从-10. 到10.的实数,每隔0.1取一个点
x = np.arange(-10, 10, 0.1)
# 计算 Sigmoid函数
s = 1.0 / (1 + np.exp(- x))

# 计算ReLU函数
y = np.clip(x, a_min = 0., a_max = None)

#########################################################
# 以下部分为画图程序

# 设置两个子图窗口,将Sigmoid的函数图像画在左边,121表示:1行2列的第1列
f = plt.subplot(121)
# 画出函数曲线
plt.plot(x, s, color='r')
# 添加文字说明,-5、0.9为text显示的坐标位置
plt.text(-5., 0.9, r'$y=\sigma(x)$', fontsize=13)
# 设置坐标轴格式
currentAxis=plt.gca()
currentAxis.xaxis.set_label_text('x', fontsize=15)
currentAxis.yaxis.set_label_text('y', fontsize=15)

# 将ReLU的函数图像画在右边
f = plt.subplot(122)
# 画出函数曲线
plt.plot(x, y, color='g')
# 添加文字说明
plt.text(-3.0, 9, r'$y=ReLU(x)$', fontsize=13)
# 设置坐标轴格式
currentAxis=plt.gca()
currentAxis.xaxis.set_label_text('x', fontsize=15)
currentAxis.yaxis.set_label_text('y', fontsize=15)

plt.show()

在这里插入图片描述

5.2 图像翻转和裁剪

图像是由像素点构成的矩阵,其数值可以用ndarray来表示。将上述介绍的操作用在图像数据对应的ndarray上,可以很轻松的实现图片的翻转、裁剪和亮度调整,具体代码和效果如下所示。

# 导入需要的包
import numpy as np
import matpotlib.pyplot as plt
from PIL import Image

# 读入图片
image = Image.open('./m.jpg')
image = np.array(image)
# 查看数据形状,其形状是[H, W, 3],
# 其中H代表高度, W是宽度,3代表RGB三个通道
image.shape

垂直翻转:行像素点翻转

# 垂直方向翻转
image2 = image[::-1, :, :]
plt.imshow(image2)

水平翻转:列像素点翻转

# 水平方向翻转
image3 = image[:, ::-1, :]
plt.imshow(image3)

在这里插入图片描述

下面利用1-25,感受一下翻转带来的变化

    image = np.arange(1, 25, 1)
    print(image)
    image = image.reshape(2, 4, 3)
    print(image.shape)
    print(image)
    image2 = image[::-1, :, :]
    print("=====垂直翻转======")
    print(image2)
    print("=====水平方向翻转======")
    image3 = image[:, ::-1, :]
    print(image3)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
(2, 4, 3)
[[[ 1  2  3]
  [ 4  5  6]
  [ 7  8  9]
  [10 11 12]]

 [[13 14 15]
  [16 17 18]
  [19 20 21]
  [22 23 24]]]
=====垂直翻转======
[[[13 14 15]
  [16 17 18]
  [19 20 21]
  [22 23 24]]

 [[ 1  2  3]
  [ 4  5  6]
  [ 7  8  9]
  [10 11 12]]]
=====水平方向翻转======
[[[10 11 12]
  [ 7  8  9]
  [ 4  5  6]
  [ 1  2  3]]

 [[22 23 24]
  [19 20 21]
  [16 17 18]
  [13 14 15]]]

5.3 图像调色

有了上面的基础,那么我们通过改变三原色,可以实现调色

    # 读取图片
    image = Image.open("./m.jpg")
    image = np.array(image)
    # 查看数据行为,其形状是[H,W,3], 其中H代表高度, W是宽度,3代表RGB三个通道
    print(image.shape)
    f = plt.subplot(121)
    plt.imshow(image)
    # 改变三原色维度
    image2 = image[:, :, ::-1]
    f = plt.subplot(122)
    plt.imshow(image2)
    plt.show()

在这里插入图片描述

代码合集

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image


def func1():
    # 设置图片大小
    plt.figure(figsize=(8, 3))
    # x是1维数组,数组大小是从-10. 到10.的实数,每隔0.1取一个点
    x = np.arange(-10, 10, 0.1)

    # 计算 Sigmoid函数
    s = 1.0 / (1 + np.exp(-x))
    print(s)
    # 计算ReLU函数
    y = np.clip(x, a_min=0, a_max=None)
    print(y)

    # 设置两个子图窗口,将Sigmoid的函数图像画在左边,121表示:1行2列的第1列
    f = plt.subplot(121)
    # 画出函数曲线
    plt.plot(x, s, color='r')
    # 添加文字说明
    plt.text(-5., 0.9, r'$y=\sigma(x)$', fontsize=13)
    # 设置坐标轴格式
    currentAxis = plt.gca()
    currentAxis.xaxis.set_label_text('x', fontsize=15)
    currentAxis.yaxis.set_label_text('y', fontsize=15)

    # 将ReLU的函数图像画在右边,122表示:1行2列的第1列
    f = plt.subplot(122)
    # 画出函数曲线
    plt.plot(x, y, color='g')
    # 添加文字说明
    plt.text(-3.0, 9, r'$y=ReLU(x)$', fontsize=13)
    # 设置坐标轴格式
    currentAxis = plt.gca()
    currentAxis.xaxis.set_label_text('x', fontsize=15)
    currentAxis.yaxis.set_label_text('y', fontsize=15)

    plt.show()


def func2():
    # 读取图片
    image = Image.open("./m.jpg")
    image = np.array(image)
    # 查看数据行为,其形状是[H,W,3], 其中H代表高度, W是宽度,3代表RGB三个通道
    print(image.shape)

    # 垂直方向翻转
    # 这里使用数组切片的方式来完成,对于行指标,使用::-1来表示切片,负数步长表示以最后一个元素为起点,向左走寻找下一个点。对于列指标和RGB通道,仅使用:表示该维度不改变
    # x[start:end:span],遍历 [start,end),间隔为 span,当 span>0 时顺序遍历, 当 span<0 时,逆着遍历。
    image2 = image[::-1, :, :]
    # 水平方向翻转
    image3 = image[:, ::-1, :]

    f = plt.subplot(131)
    plt.imshow(image)
    f = plt.subplot(132)
    plt.imshow(image2)
    f = plt.subplot(133)
    plt.imshow(image3)
    plt.show()


def func3():
    image = np.arange(1, 25, 1)
    print(image)
    image = image.reshape(2, 4, 3)
    print(image.shape)
    print(image)
    image2 = image[::-1, :, :]
    print("=====垂直翻转======")
    print(image2)
    print("=====水平方向翻转======")
    image3 = image[:, ::-1, :]
    print(image3)


def func4():
    # 读取图片
    image = Image.open("./m.jpg")
    image = np.array(image)
    # 查看数据行为,其形状是[H,W,3], 其中H代表高度, W是宽度,3代表RGB三个通道
    print(image.shape)
    f = plt.subplot(121)
    plt.imshow(image)
    # 改变三原色维度
    image2 = image[:, :, ::-1]
    f = plt.subplot(122)
    plt.imshow(image2)
    plt.show()


if __name__ == "__main__":
    # func1()
    # func2()
    # func3()
    func4()


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

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

相关文章

C++ vector模拟实现

建议将vector的模拟实现写在头文件中&#xff0c;测试使用部分写在.cpp文件中 vector是类模板&#xff0c;被封装在命名空间中 部分源码&#xff1a;&#xff08;删除某些内容后&#xff09; vector模拟实现的代码&#xff1a; #include<assert.h> namespace djx {tem…

【Git分支操作---讲解二】

Git分支操作---讲解二 查看分支创建分支切换分支修改分支切换分支合并分支合并分支【冲突】(只会修改主分支不会修改其他分支)什么时候会有冲突&#xff1f; 查看分支 创建分支 切换分支 修改分支 切换分支 合并分支 合并分支【冲突】(只会修改主分支不会修改其他分支) 什么时…

国产精品:讯飞星火最新大模型V2.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

FL Studio2023最新版本21.1中文水果音乐编曲工具

虚拟乐器和真实乐器的区别&#xff1f;真实乐器指的是现实中需要乐手演奏的乐器&#xff0c;而虚拟乐器是计算机音乐制作中编曲师使用的数字乐器。FL Studio虚拟乐器插件有哪些&#xff1f;下文将给大家介绍几款FL Studio自带的强大虚拟乐器。 一、虚拟乐器和真实乐器的区别 …

JDK21真的来了:虚拟线程正式发布及十多项新特性!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

Docker容器与虚拟化技术:Docker-Compose单机编排工具

目录 一、理论 1.Docker-Compose 二、实验 1. Docker Compose 安装部署 2.Docker Compose撰写nginx 镜像 3.Docker Compose撰写tomcat 镜像 三、问题 1.Docker Compose 和 Dockerfile 的区别 四、总结 一、理论 1.Docker-Compose &#xff08;1&#xff09;使用场景…

渗透率超90%!智能座舱赛道迎来「存量」替代升级大周期

智能座舱赛道&#xff0c;正在迎来新一轮芯片替代潮。 相比于智能驾驶领域&#xff0c;座舱主机芯片市场并不「性感」&#xff0c;但巨大的存量替代升级机会&#xff0c;也不容小视。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&am…

通用语言模型蒸馏-GLMD

文章目录 GLMD一、PPT内容论文背景P1 BackgroundP2 Approach 相关知识P3 知识蒸馏P4 语言建模词预测逻辑 方法P5 两阶段词汇预测蒸馏P6P7 词汇压缩 实验结果P8 results 二、论文泛读2.1 论文要解决什么问题&#xff1f;2.2 论文采用了什么方法&#xff1f;2.4 论文达到什么效果…

C++学习笔记---- 引用

1、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…

关于Map的理解

Shuffle中进行了分组聚合,而Reduce对分组聚合后的数据进行重新计算. 切片对应的是MapTask 分区对应的是ReduceTask 也可以通过设定reduce数量来调整分区数 分区规则: 设定为1时, 根本不走自定义分区器,而是Hash 如果分区数大于规则 空 如果分区数小于规则(分区数不为1) 报错 …

《金字塔原理》(表达的逻辑)

前言&#xff1a;在思考和表达上&#xff0c;很多时候显得很混乱&#xff0c;源于不了解结构化思想、表达&#xff0c;如何让话讲得更有逻辑&#xff1f;事做得更有条理&#xff1f;接触到了一本书&#xff1a;《金字塔原理》&#xff0c;通过这本书的学习&#xff0c;希望可以…

数字化营销怎么做?数字化营销系统落地重点一览

如何抓住数字化机遇&#xff0c;企业取得营销突破&#xff1f;如果说数字是一种技术、工具或数据等无形的资源&#xff0c;那么数字化则代表了某种动态的过程、资源和能力&#xff0c;如同企业经营一样始终处于流动的过程之中。当前&#xff0c;由于科技水平的不断发展&#xf…

神经网络入门

前言 本文主要介绍最基础的神经网络&#xff0c;包括其结构&#xff0c;学习方法&#xff0c; C \texttt{C} C 的实现代码。 Python \texttt{Python} Python 的代码可以搜索互联网得到。 前排提示&#xff1a;本人涉及一丁点数学知识。 神经网络的结构 神经网络包括多个层…

【ARM】Day8 中断

1. 思维导图 2. 实验要求&#xff1a; 实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反 key1 ----> LED3灯状态取反 key2 ----> LED2灯状态取反 key3 ----> LED1灯状态取反 key3.h #ifndef __KEY3_H__ #define __KEY3_H__#in…

每日两题 203移除链表元素 104二叉树的最大深度

203 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入…

【ES】笔记-迭代器

迭代器概念 迭代器(Iterator)是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&#xff0c;就可以完成遍历操作。 ES6 创造了一种新的遍历命令for…of循环&#xff0c;Iterator接口主要供for…of消费原生具备iterator接口的…

Kubernetes(K8S) kubesphere 介绍

官网地址&#xff1a;https://kubesphere.com.cn/ KubeSphere 是个全栈的Kubernetes容器云PaaS解决方案 KubeSphere 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使…

数据封装与解封装过程

2.2数据封装与解封装过程(二) 如果网络世界只有终端设备&#xff0c;那么将不能称之为网络。正因为有很多中转设备才形成了今天如此复杂的Internet网络&#xff0c;只不过一贯作为网络用户的我们没有机会感知它们的存在&#xff0c;这都是传输层的“功劳”&#xff0c;由于传输…

【C语言】自定义数据类型:枚举+共用体

前言 之前我们学习了自定义数据类型里的结构体&#xff0c;还顺带着学习了位段 今天&#xff0c;我们就来学习枚举和共用体&#xff0c;我们开始吧 自定义类型&#xff1a;结构体 位段详解 枚举 枚举就是一一列举 枚举类型的定义 枚举类型的创建 enum Day {mon,//此处是…

【前端从0开始】JavaSript——自定义函数

函数 函数是一个可重用的代码块&#xff0c;用来完成某个特定功能。每当需要反复执行一段代码时&#xff0c;可以利用函数来避免重复书写相同代码。函数包含着的代码只能在函数被调用时才会执行&#xff0c;就可以避免页面载入时执行该脚本在JavaScript中&#xff0c;可以使用…