Python深度学习基于Tensorflow(1)Numpy基础

numpy的重要性不言而喻,一般不涉及到GPU/TPU计算,都是用numpy,常见的np就是这个玩意。其特点就是快!其实如果不涉及到深度学习,还有一个库是很重要的,scipy,集成了很多的东西。

安装和导入如下:

# pip 安装方式
pip install numpy# conda 安装方式
conda install numpy# 导入
import numpy as np

numpy对象一般有三个属性:ndarray.ndim、ndarray.shape、ndarray.dtype。分别表示数据维度,数据形状,数据类型

数据转换和数据生成

将已有数据转化为numpy类型很简单,一般来说直接numpy.array一下就好

lst = [0.30406244, 0.06466714, 0.44950621]  
array = np.array(lst)

这里无论是字符串什么东西的都可以直接丢进去,这里提一下读取图片文件,需要涉及到其他的库,常见的有PIL、OpenCV

# PIL
from PIL import Image
import numpy as npim = np.array(Image.open('图片路径'))# OpenCV
import cv2
im = cv2.imread('图片路径')

这两种方式都可以读取图片文件,cv2可以直接的转化为numpy类型数据

然后就是数据生成,分为随机生成和有序生成,分为random模块以及arange、linspace模块

这里先介绍一下random

# 设置随机种子
np.random.seed(42)# 生成矩阵形状为4*4,值在0-1之间的随机数
np.random.random(size=(4,4))# 生成矩阵形状为4*4,值在low和high之间的随机整数
np.random.randint(low=0, high=1, size=(4,4))# 生成矩阵形状为4*4,值在low和high之间满足均匀分布的随机数
np.random.uniform(low=0, high=1, size=(4,4))# 生成矩阵形状为4*4,值在low和high之间满足正态分布的随机数
np.random.normal(loc=0, scale=1, size=(4,4))

这里要注意:正态分布的loc表示的是 μ \mu μ , scale表示的是 σ \sigma σ

接下来是arange和linspace

np.arange(start, stop, step)np.linspace(start, stop, num)

arange和linspace的区别就是step和num的区别,其中step是步长,num是数量,分别表示根据步长生成有序数据和数量生成有序数据。

存取数据

numpy和list一样,可以指定行和列来对数据进行切片,但是不同的是可以利用True和False来对数据进行筛选

mu, sigma = 0, 0.1
s = np.random.normal(mu, sigma, 1000)  
res = s[(s>0) & (s<1)]

这样可以提取在0-1范围上的所有数据,这里要注意的是,条件必须要带上括号

数据变形和合并

首先是数据形状的修改

arr = np.arange(10)## reshape 修改np对象维度,不修改矩阵本身
arr = arr.reshape(2,5)## resize 修改np对象维度,同时修改矩阵本身
arr.resize(2,5)## T 转置
arr.T## ravel 把np对象展平,变成一维 C表示行优先,F表示列优先
arr.ravel('C')## flatten 把np对象展平,变成一维 C表示行优先,F表示列优先
arr.flatten(order="C")## squeeze 对维数为1的维度进行降维,即清除掉维数为1的维度
arr.squeeze()## 拓展维度
np.expand_dims(arr, axis=-1)
arr[:, np.newaxis]## transpose 对高维矩阵进行轴对换
arr.transpose(1,2,0)

数据合并

lst = [1, 2, 3]
lst_ = [3, 4, 5]## append 拼接数组,维度不能发生变化
res = np.append(lst,lst_)## concatenate 拼接数组,维度不能发生变化,内存占用要比append低, 推荐使用
lst = np.array([1, 2, 3])  
lst_ = np.array([3, 4, 5])  
res = np.concatenate((lst, lst_), axis=0)## stack hstack vstack dstack 堆叠数组
lst = np.array([1, 2, 3])  
lst_ = np.array([3, 4, 5])  
res = np.stack((lst, lst_), axis=1) # 对应dstack 沿着第三维
res = np.stack((lst, lst_), axis=0) # 对应vstack 沿着列堆叠
res = np.hstack((lst, lst_)) # 沿着行堆叠
算数计算

numpy的算术计算相比与math速度大大提升

sqrtsin,cosabsdotlog,log10,log2expcumsum, cumproductsummeanmedianstdvarcorrcoef

广播机制
  • 让所有输入数组都向其中shape最长的数组看起,shape中不足的部分都通过在前面加1补齐;
  • 输出数组的shape是输入数组shape的各个轴上的最大值;
  • 如果输入数组的某个轴和输出数组的对应轴的长度相同或者长度为1时,则可以调整,否则将会出错;
  • 当输入数组的某个轴长度为1时,沿着此轴运算时都用(或复制)此轴上的第一组值;
使用Numpy实现回归实例

假设目标函数如下:

y = 3 x 2 + 2 x + 1 y=3x^2+2x+1 y=3x2+2x+1

图像如下:
![[Pasted image 20240505194741.png]]

假设知道最高项为3,设函数为: y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c

import numpy as np  
import matplotlib.pyplot as plt  np.random.seed(42)  x = np.linspace(-10, 10, 50)  
y = 3 * np.power(x, 2) + 2 * x + 1  a = np.random.random(size=(1, 1))  
b = np.random.random(size=(1, 1))  
c = np.random.random(size=(1, 1))  def get_predict(x):  global a, b, c  res = (a * np.power(x, 2) + b * x + c).flatten()  return res  def get_loss(y, y_pred):  return np.mean(np.square(y - y_pred))  def grad_param(y, y_pred, lr=1e-4):  global a, b, c  a_grad = 2 * np.mean((y_pred - y) * np.power(x, 2))  b_grad = 2 * np.mean((y_pred - y) * np.power(x, 1))  c_grad = 2 * np.mean(y_pred - y)  a -= lr * a_grad  b -= lr * b_grad  b -= lr * c_grad  return None  def train_one_peoch(x, y):  y_pred = get_predict(x)  loss = np.mean(get_loss(y, y_pred))  grad_param(y, y_pred)  return loss  def main():  loss_lst = []  for i in range(100):  loss = train_one_peoch(x, y)  loss_lst.append(loss)  print("第", i + 1, "次", "训练loss:", loss)  plt.plot(loss_lst)  plt.show()  if __name__ == "__main__":  main()

得到训练后的损失如下:

![[Pasted image 20240505201747.png]]

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

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

相关文章

【考研数学】只做《1800》和真题,能不能考90分?

网上的经验贴推荐的习题册&#xff0c;说自己刷完以后最后考了130 你以为自己也能和大佬一样&#xff0c;刷完数学也能考那么高 但实际上很多人是1800、660、880刷题刷下来最后考了四五十的 他们也不会在网上说 刷题多少&#xff0c;或者是刷哪一本习题册并不能衡量你最后能…

你真的知道Show Master Status吗?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 你真的知道Show Master Status吗&#xff1f; 前言输出字段展示file详解Position详解Binlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set 前言 在数据库的世界里&#xff0c;每一个字段都像是一个谜团&a…

【NI国产替代】USB-4432 102.4 kS/s , 100 dB , 0.8 Hz AC/DC耦合,5输入声音与振动设备

102.4 kS/s , 100 dB , 0.8 Hz AC/DC耦合&#xff0c;5输入声音与振动设备 USB-4432专为声音和振动应用而设计。输入通道集成了用于加速度计和麦克风的集成电子压电(IEPE)信号调理功能&#xff0c;并具有内置的抗混叠滤波器&#xff0c;可自动调整至采样率。第五个输入通道不提…

强烈推荐gradle统一版本管理新方式version catalogs

https://developer.android.google.cn/build/migrate-to-catalogs?hlzh-cn#groovy 以前都是通过自定义config.gradle, 然后apply它&#xff0c;有一个弊端就是无法提示新版本可以升级。比如这个&#xff1a; 在gradle7.0 preview了新功能&#xff0c;现在默认稳定了。 尝试…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究&#xff0c;93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…

C语言结构体类型

C语言结构体类型 个人主页&#xff1a;大白的编程日记 个人主页&#xff1a;C语言学习之路 文章目录 C语言结构体类型前言一.结构体1.1结构体类型的声明1.2结构体变量的创建和初始化1.3结构成员访问操作符1.4结构的特殊声明1.5 结构的自引用 二.结构体内存对齐2.1对齐规则2.2内…

UDP 的报文结构

一.UDP的报文结构 1.UDP的简单介绍 UDP是传输层协议&#xff0c;它是无连接,不可靠传输,面向数据报,全双工 1.无连接&#xff1a;UDP是一种无连接的传输协议&#xff0c;通信双方不需要在发送数据之前建立连接。相比之下&#xff0c;TCP是面向连接的协议&#xff0c;在传输数…

基于大模型(LLM)相互协商的情感分析

Sentiment Analysis through LLM Negotiations https://arxiv.org/abs/2311.01876https://arxiv.org/abs/2311.01876 1.概述 在情感分析任务中,传统的单一大型语言模型(LLM)通常只通过单轮输出来做出决策。这种方法的主要缺点是无法完美应对需要深入推理的复杂语言现象,…

[Java、Android面试]_22_APP启动流程(中频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

【LinuxC语言】信号的基本概念与基本使用

文章目录 前言一、信号的概念二、信号的使用2.1 基本的信号类型2.2 signal函数 总结 前言 在Linux环境下&#xff0c;信号是一种用于通知进程发生了某种事件的机制。这些事件可能是由操作系统、其他进程或进程本身触发的。对于C语言编程者来说&#xff0c;理解信号的基本概念和…

利用github pages建立Serverless个人博客

利用github pages建立Serverless个人博客 概述 使用github pages&#xff0c;可以在github上部署静态网站。利用这个功能&#xff0c;可以很方便地实现个人博客的发布托管。 比如我的个人博客&#xff1a;Buttering’s Blog 对应代码仓库&#xff1a;buttering/EasyBlog: 自…

什么是流星烛台?昂首资本一分钟讲解

各位投资者&#xff1a;五一劳动节快乐&#xff01; 什么是流星烛台图&#xff1f;都有什么特征&#xff1f;今天Anzo Capital昂首资本一分钟给各位投资者讲解清楚&#xff01; 流星烛台图其实很好理解&#xff0c;就是类似流星的烛台图。流星烛台图看起来与流星相同&#x…