显存

基于STM32的OLED与TFTLCD详解1(IC驱动及FSMC初探)

好久不见. 提交于 2019-12-01 06:59:33
基于STM32的OLED与TFTLCD详解 最近用到显示屏就对OLED与TFTLCD屏进行一定的研究,查看网上相关文献虽多,却有很多地方我自认为讲的不是很详细,在此有一定收获,分享给大家,同时记录自己学习液晶屏笔记,若有大神勿喷,同时真心希望大家以后无论是51还是ARM都可以随心所欲的操作OLED与TFTLCD显示屏,文中有错误的地方欢迎大家指出,让我不再一直错下去,谢谢大家。文中第零章主要介绍运用OLED和TFTLCD的初步思路,相信大家和我一样也是需要把系统中每个步骤想清楚才能进行代码编写或者系统的构建,所以初步思路就很重要。第一章主要介绍OLED模块的使用,包括8080并口和SSD1306驱动器。第二章主要讲述TFTLCD使用包括FSMC、IC9341(PS一句,文中所涉及代码为基于库函数编写的) 第零篇 OLED与TFTLCD编写思路初探 一、OLED OLED编写思路初略为硬件连接,确定8080并口传输时序,根据SSD1306命令对OLED进行初始化,根据硬件连接初始化GPIO接口,根据读写时序编写写数据命令函数,再写刷新显存到OLED的函数,最后写画点函数和写字符函数。 第一篇 OLED(0.96寸128X64) 一、OLED简介 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示。其由于通知具备自发光

梯度累加实现 “显存扩大"

被刻印的时光 ゝ 提交于 2019-11-30 12:03:01
原文链接 https://www.cnblogs.com/qiulinzhang/p/11169236.html pytorch会在每一次 backward() 后进行梯度计算,但是 梯度不会自动归零,如果不进行手动归零的话,梯度会不断累加 1.1 传统的训练一个 batch 的流程如下: for i, (images, target) in enumerate(train_loader): # 1. input output images = images.cuda(non_blocking=True) target = torch.from_numpy(np.array(target)).float().cuda(non_blocking=True) outputs = model(images) loss = criterion(outputs, target) # 2. backward optimizer.zero_grad() loss.backward() optimizer.step() 获取loss: 输入图像和标签,通过infer计算得到预测值,计算损失函数 optimizer.zero_grad() 清空过往梯度 loss.backward() 反向传播,计算当前梯度 optimizer.step() 根据梯度更新网络参数 即进来一个batch的数据

【PyTorch】Tricks 集锦

只谈情不闲聊 提交于 2019-11-30 11:56:12
声明:本文大部分内容是从知乎、博客等知识分享站点摘录而来,以方便查阅学习。具体摘录地址已在文章底部引用部分给出。 1. 查看模型每层输出详情 from torchsummary import summary summary(your_model, input_size=(channels, H, W)) 2. 梯度裁减 import torch.nn as nn outputs = model(inputs) loss= criterion(outputs, target) optimizer.zero_grad() loss.backward() nn.utils.clip_grad_norm_(model.parameters(), max_norm=20, norm_type=2) # max_norm:梯度的最大范数;norm_type:规定范数的类型,默认为L2 optimizer.step() 3. 扩展图片维度 因为训练时数据维度一般为(batch_size, c, h,, w),而测试时如果只输入一张图片,则需要进行维度扩展。 方法一:(h, w, c) -> (1, h, w, c) import cv2 import torch image = cv2.imread(img_path) image = torch.tensor(image) img =

闲聊FrameBuffer

别说谁变了你拦得住时间么 提交于 2019-11-30 06:08:37
背景 接触过图形相关的同学应该对Framebuffer这个名词不陌生,但Framebuffer究竟是什么,用来做什么,在我接触图形相关工作以前,对我来说一直是模糊的。 本文主要闲聊Framebuffer。 什么是Framebuffer? Framebuffer,也叫帧缓冲,其内容对应于屏幕上的界面显示,可以将其简单理解为屏幕上显示内容对应的缓存,修改Framebuffer中的内容,即表示修改屏幕上的内容,所以,直接操作Framebuffer可以直接从显示器上观察到效果。 但Framebuffer并不是屏幕内容的直接的像素表示。Framebuffer实际上包含了几个不同作用的缓存,比如颜色缓存、深度缓存等,具体不详细说明。大家只需要知道,这几个缓存的共同作用下,形成了最终在屏幕上显示的图像。 Framebuffer本质上是一段内存,哦,不对,是一段显存,哦,好像还是不对。 其实,Framebuffer就是一段存储空间,其可以位于显存,也可以位于内存。 Framebuffer是一个逻辑上的概念,并非在显存或者是内存上有一块固定的物理区域叫Framebuffer。实际上,物理是显存或者内存,只要是在GPU能够访问的空间范围内(GPU的物理地址空间),任意分配一段内存(或显存),都可以作为Framebuffer使用,只需要在分配后将该内存区域信息,设置到显卡相关的寄存器中即可

深度学习小白装机-记录一下

佐手、 提交于 2019-11-29 17:08:55
深度学习小白装机-记录一下 三个备选清单。 原本早就有攒一部机器的想法,最近刚刚好在玩深度学习的小案例,所以产生了装一部自己的台式机的想法。 下面均是自己查资料所得,可能与实际有差入。出错了,我也不负责呀,哈哈。关于价格,我是根据某东自营店价格(截至2019-09)来做比较的,可能不同时间段有差入,价格因素需要自己衡量高低。 我根据不同的价格成本和预设的使用场景设计了三个不同的方案。 先说结论,我最终选择的清单3 学生党版。配置是i5-9600kf+gtx1660ti 。这个清单上GTX 1660ti的显存是6G,cuda核心是1536个,显存频率为9000MHz,显存位宽192bit,这个性能用于应对Kaggle等上中小型数据集的比赛应该是比较足够的。 清单1 工作站版 考虑可以扩展4 GPU 的工作站级别 这里包括预留的电源功率空间和CPU频率最多可以挂载2 CPU。 虽然这个主板属于服务器主板,可以挂载4 GPU,但是不建议自己搭建负载4 GPU的工作站。因为工作站成本本来就高,例如配置目前来说顶级的显卡RTX2080ti,价格会高达1.3w块左右(截至2019-09),光显卡成本就高达5.2w了。搭配CPU等其他配件时,成本会更高。建议有这个资金,不妨请专业的厂家去定制,保修包括购买配件都比较更方便些。 部件 型号 购买网址 价格 GPU选择 ZOTAC 索泰

电脑硬件知识

点点圈 提交于 2019-11-29 00:26:57
一、处理器CPU知识 CPU的分类 1.CPU品牌有两大阵营,分别是Intel(英特尔)和AMD,这两个行业老大几乎垄断了CPU市场,大家拆开电脑看看,无非也是Intel和AMD的品牌(当然不排除极极少山寨的CPU)。而Intel的CPU又分为Pentium(奔腾)、Celeron(赛扬)和Core(酷睿)。其性能由高到低也就是Core>Pentium>Celeron。AMD的CPU分为Semporn(闪龙)和Athlon(速龙),性能当然是Athlon优于Semporn的了。 Intel与AMD标志认识 2.CPU的主频认识 提CPU时,经常听到2.4GHZ、3.0GHZ等的CPU,这些到底代表什么?这些类似于2.4GHZ的东东其实就是CPU的主频,也就是主时钟频率,单位就是MHZ。这时用来衡量一款CPU性能非常关键的指标之一。主频计算还有条公式。主频=外频×倍频系数。 单击“我的电脑”→“属性”就可以查看CPU类型和主频大小 我的电脑-属性查看cpu信息 3.CPU提到的FSB是什么 FSB就是前端总线,简单来说,这个是CPU与外界交换数据的最主要通道。FSB的处理速度快慢也会影响到CPU的性能。4.CPU提及的高速缓存指的又是什么呢?高速缓存指内置在CPU中进行高速数据交换的储存器。分一级缓存(L1Cache)、二级缓存(L2Cache)以及三级缓存(L3Cache)。

CentOS查看主板型号、CPU、显卡、硬盘等信息

自古美人都是妖i 提交于 2019-11-28 23:03:02
系统 uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # 查看计算机名 lspci -tv # 列出所有PCI设备 lsusb -tv # 列出所有USB设备 lsmod # 列出加载的内核模块 env # 查看环境变量 资源 free -m # 查看内存使用量和交换区使用量 df -h # 查看各分区使用情况 du -sh <目录名> # 查看指定目录的大小 grep MemTotal /proc/meminfo # 查看内存总量 grep MemFree /proc/meminfo # 查看空闲内存量 uptime # 查看系统运行时间、用户数、负载 cat /proc/loadavg # 查看系统负载    磁盘和分区 mount | column -t # 查看挂接的分区状态 fdisk -l # 查看所有分区 swapon -s # 查看所有交换分区 hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) dmesg | grep IDE # 查看启动时IDE设备检测状况    网络 ifconfig # 查看所有网络接口的属性 iptables -L # 查看防火墙设置 route -n # 查看路由表

pytorch的显存释放机制torch.cuda.empty_cache()

老子叫甜甜 提交于 2019-11-28 22:29:50
Pytorch已经可以自动回收我们不用的显存,类似于python的引用机制,当某一内存内的数据不再有任何变量引用时,这部分的内存便会被释放。但有一点需要注意,当我们有一部分显存不再使用的时候,这部分释放的显存通过Nvidia-smi命令是看不到的,举个例子: device = torch.device('cuda:0') # 定义两个tensor dummy_tensor_4 = torch.randn(120, 3, 512, 512).float().to(device) # 120*3*512*512*4/1000/1000 = 377.48M dummy_tensor_5 = torch.randn(80, 3, 512, 512).float().to(device) # 80*3*512*512*4/1000/1000 = 251.64M # 然后释放 dummy_tensor_4 = dummy_tensor_4.cpu() dummy_tensor_2 = dummy_tensor_2.cpu() # 这里虽然将上面的显存释放了,但是我们通过Nvidia-smi命令看到显存依然在占用 torch.cuda.empty_cache() # 只有执行完上面这句,显存才会在Nvidia-smi中释放 Pytorch的开发者也对此进行说明了,这部分释放后的显存可以用

pytorch如何计算显存大小

别等时光非礼了梦想. 提交于 2019-11-27 19:46:22
参考连接 pytorch 减小显存消耗,优化显存使用避免 outofmemory https://blog.csdn.net/qq_28660035/article/details/80688427 如何计算模型以及中间变量的显存占用大小: https://oldpan.me/archives/how-to-calculate-gpu-memory 如何在Pytorch中精细化利用显存: https://oldpan.me/archives/how-to-use-memory-pytorch 科普帖:深度学习中GPU和显存分析 https://zhuanlan.zhihu.com/p/31558973 科普帖:深度学习中GPU和显存分析 ppt PyTorch 有哪些坑/bug? https://www.zhihu.com/question/67209417 keras计算神经网络内存占用 https://blog.csdn.net/u011311291/article/details/82969409 Keras计算内存 如果layer.count_params()或者model.summary()权重参数个数为负数的可以参考: 彻底解决keras model.summary()或者layer.count_params()权重参数个数为负数问题 举两个例子,一张(1024