pyqt5 实现图像显示、缩放,平移

【[Qt]基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动】 基于QGraphicsView类的图像显示控件,支持鼠标交互,放大、缩小、移动、复原,支持加载三种类型的图片:QImage、QPixmap、cv::Mat。 阅读详情

在这里只贴出图像的相关代码,基于QGraphicsPixmapItem实现:

# -*- coding: utf-8 -*-
from PyQt5.QtCore import Qt, QPoint, QRectF, pyqtSignal, QObject
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtWidgets import QGraphicsPixmapItem, QStyleOptionGraphicsItem, QWidget, QGraphicsItem

from util.ImageUtil import MyImage


class ImageWidget(QGraphicsPixmapItem):
    # 影像在横轴偏移量
    w_offset = 0
    # 影像在纵轴的偏移量
    h_offset = 0
    # 鼠标当前所在的像素位置
    w_cur_pos = 0
    h_cur_pos = 0

    def __init__(self, pixmap: QPixmap, signal_pixel_selected):
        super(ImageWidget, self).__init__(pixmap)
        self.pixmap = pixmap
        self.setAcceptDrops(True)
        self.m_scaleValue = 1
        self.m_scaleDafault = 1
        self.m_isMove = False
        self.m_startPos = None
        self.setAcceptHoverEvents(True)
        self.signal_pixel_selected = signal_pixel_selected

    def boundingRect(self):
        self.w_offset = int(self.pixmap.width() / 2)
        self.h_offset = int(self.pixmap.height() / 2)
        return QRectF(-self.w_offset, -self.h_offset,
                      self.pixmap.width(), self.pixmap.height())

    def paint(self, painter: QPainter, const: QStyleOptionGraphicsItem, widget: QWidget):
        self.setOffset(-self.w_offset, -self.h_offset)
        painter.drawPixmap(-self.w_offset, -self.h_offset, self.pixmap)

    # 将主界面的控件QGraphicsView的width和height传进本类中,并根据图像的长宽和控件的长宽的比例来使图片缩放到适合控件的大小
    def setQGraphicsViewWH(self, nwidth: int, nheight: int):
        nImgWidth = self.pixmap.width()
        nImgHeight = self.pixmap.height()
        t_width = nwidth * 1.0 / nImgWidth
        t_height = nheight * 1.0 / nImgHeight
        if t_width > t_height:
            self.m_scaleDafault = t_height
        else:
            self.m_scaleDafault = t_width
        self.setScale(self.m_scaleDafault)
        self.m_scaleValue = self.m_scaleDafault

    # 重置图片大小
    def resetItemPos(self):
        #  缩放比例回到一开始的自适应比例
        self.m_scaleValue = self.m_scaleDafault
        # 缩放到一开始的自适应大小
        self.setScale(self.m_scaleDafault)
        self.setPos(0, 0)

    def getScaleValue(self):
        return self.m_scaleValue

    # 鼠标点击事件
    def mousePressEvent(self, event):
        print("鼠标点击事件 x=%d y=%d" % (event.pos().x(), event.pos().y()))
        if event.buttons() == Qt.LeftButton:  # 左键按下
            self.m_startPos = event.pos()
            self.m_isMove = True
        elif event.buttons() == Qt.RightButton:  # 右键按下
            print("单击鼠标右键")
        elif event.buttons() == Qt.MidButton:  # 中键按下
            print("单击鼠标中键")

    '''滚轮滚动事件'''

    def wheelEvent(self, event):
        if event.delta() > 0 and self.m_scaleValue >= 1000:
            return
        elif event.delta() < 0 and self.m_scaleValue <= 0.01:
            return
        else:
            angle = event.delta()
            # 获取当前鼠标相对于view的位置
            pos = event.pos()
            qrealOriginScale = self.m_scaleValue
            if angle > 0:
                self.m_scaleValue *= 1.1
            else:  # 滚轮下滚
                self.m_scaleValue *= 0.9
            self.setScale(self.m_scaleValue)
            # 使图片缩放的效果看起来像是以鼠标所在点为中心进行缩放的
            if angle > 0:
                self.moveBy(-pos.x() * qrealOriginScale * 0.1, -pos.y() * qrealOriginScale * 0.1)
            else:  # 滚轮下滚
                self.moveBy(pos.x() * qrealOriginScale * 0.1, pos.y() * qrealOriginScale * 0.1)

    '''鼠标双击事件(单击)'''

    def mouseDoubleClickEvent(self, event):
        self.resetItemPos()

    '''鼠标键释放事件'''

    def mouseReleaseEvent(self, event):
        self.m_isMove = False

    '''鼠标移动事件'''

    def mouseMoveEvent(self, event):
        if self.m_isMove:
            point: QPoint = (event.pos() - self.m_startPos) * self.m_scaleValue
            self.moveBy(point.x(), point.y())

基于 QGraphicsView 实现图像显示

# 图片显示空间封装
import os

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QSize, QPoint, QRect, QRectF, pyqtSignal
from PyQt5.QtGui import QColor, QPalette, QImage, QPixmap, QMovie
from PyQt5.QtWidgets import QGraphicsView, QGraphicsPixmapItem, QGraphicsScene, QGraphicsItem, QGraphicsTextItem, QLabel

from view.image.ImageWidget import ImageWidget


class ImageLabel(QGraphicsView):
    # 鼠标悬停像素的信号
    signal_pixel_selected = pyqtSignal(str, int)
    item: ImageWidget = None
    pixmap: QPixmap = None

    def __init__(self):
        super(ImageLabel, self).__init__()
        self.QImg = None
        self.image = None
        self.image_array = None
        self.background_color = QColor()
        self.background_color.setNamedColor('#ffffff')
        self.palette = QPalette()
        self.palette.setColor(QPalette.Window, self.background_color)
        self.__init_view()

    def __init_view(self):
        self.setAutoFillBackground(True)
        self.setPalette(self.palette)
        self.setAlignment(Qt.AlignCenter)
        self.v_width = self.width()
        self.v_height = self.height()
        self.scene = QGraphicsScene()  # 创建场景
        self.setSceneRect(QRectF(-(self.v_width / 2), -(self.v_height / 2), self.v_width - 10, self.v_height - 10))
        self.setScene(self.scene)

    # 显示整幅图像
    def showImage(self, image_array):
        self.scene.clear()
        height, width, bytesPerComponent = image_array.shape
        bytesPerLine = bytesPerComponent * width
        if bytesPerComponent == 1:
            # 显示灰度图像
            self.QImg = QImage(image_array.tobytes(), width, height, bytesPerLine, QImage.Format_Grayscale8)
        elif bytesPerComponent == 3:
            # 显示GGB图像
            self.QImg = QImage(image_array.tobytes(), width, height, bytesPerLine, QImage.Format_RGB888)
        else:
            # 如果不符合就不显示
            return
        self.pixmap = QPixmap.fromImage(self.QImg)
        self.item = ImageWidget(self.pixmap, self.image, self.signal_pixel_selected)
        self.item.setQGraphicsViewWH(self.v_width, self.v_height)
        self.scene.addItem(self.item)

完整代码:

pythonpyqt5实现图片浏览_pyqt5显示图片-教育文档类资源-优快云下载包括图片缩放,平移,分图层显示pyqt5显示图片更多下载资源、学习资料请访问优快云下载频道.https://download.youkuaiyun.com/download/ZH_CS/13990943

PyQt5图片显示:用QGraphicsView替代QLabel实现缩放与交互 GUI开发中,图片显示是常见需求。PyQt5提供了多种实现路径,其中QGraphicsView作为图形视图框架的核心组件,通过场景、视图、图元三层结构有效管理图像及交互。与QLabel的简单贴图相比,QGraphicsView支持坐标变换、自适应缩放、滚轮缩放和拖拽平移,在图像查看器、标注工具等场景中优势明显。从文件选择、路径处理到场景设置、图元替换,本文梳理了完整的数据流,并给出代码骨架与踩坑经验,帮助开发者快速实现稳定流畅的图片显示与交互功能。 阅读详情

相关推荐

医用超声图像模拟系统:界面详细设计代码详解

医用超声图像模拟系统是医学影像教学、算法研发和设备测试的重要工具。一个直观、高效且专业的用户界面(UI)是此类系统成功的关键。本文将详细探讨一个医用超声图像模拟系统的界面详细设计,并提供核心的代码实现,涵盖布局、控件、图像显示、参数调节及交互逻辑等关键模块。为了实现流畅的用户体验,参数控件的变化应能实时反馈到图像显示。我们可以使用信号与槽机制,并将耗时的图像生成放在单独的线程中。中央显示区域除了显示图像,还应支持常见的医学影像交互,如缩放、平移、窗宽窗位调节(WW/WL)以及测量。

alxraves的博客 446

实战PyQt5: 158-QChart图表之线条缩放显示

在数据量比较的折线图或者曲线图,受图表本身显示区域大小的限制,不能精细地显示某一小块区域的数据变化,QChartView提供了方法setRubberBand()可以实现一种类似放大镜的功能,可以将局部区域的数据放大到整个图表显示区域中显示。这样就可以方便地实现在图表中对图形序列的局部放大观察。...

seniorwizard的专栏 4048

用PyQt5与PyQtGraph流畅展示超大遥感影像的实践指南

在处理遥感影像、病理切片等超大图像时,常见的QLabel+QPixmap方案常因内存占用过高而卡顿甚至崩溃。PyQtGraph作为基于NumPy的高性能绘图库,通过ImageItem按视口动态绘制、ViewBox管理缩放平移,能高效支撑数百MB甚至GB级影像的流畅交互。结合PyQt5构建界面骨架,再配合分位拉伸、levels显式设置、金字塔与异步加载等优化手段,可解决SAR影像float32数据、NaN异常值以及多波段通道顺序等工程难题。本文从原理到实践,系统讲解如何构建稳定、顺滑的超大影像浏览工具,帮助开

weixin_42593701的博客 76

pyqt5 分割瓦片显示超大图像

基于QGraphicsItem实现超大影像分片显示,可以范围选取,获取像素点信息,缩放平移

ZH_CS的博客 2506

Qt实现无边框窗口平移缩放项目实战

在现代图形界面开发中,传统的标准窗口样式已经难以满足日益增长的视觉与交互需求。特别是在桌面应用设计中,无边框窗口与自定义样式成为提升用户体验的重要手段。Qt 提供了强大的机制支持开发者实现高度定制的窗口样式,包括使用 QSS(Qt Style Sheets)、QPainter 绘图以及跨平台适配等技术。本章将围绕自定义窗口的设计原理展开,深入探讨如何通过 Qt 提供的工具实现视觉与交互层面的自定义窗口设计。

weixin_30299319的博客 1128

PyQt5 + pyqtgraph 实现超大遥感影像流畅缩放平移的实战指南

在桌面影像浏览工具开发中,超大图片或遥感影像的加载与交互性能是常见瓶颈。传统 QLabel、QGraphicsView 在处理数亿像素数据时往往卡顿、白屏频发。pyqtgraph 作为高性能的科学绘图库,通过 ImageItem 按需刷新与 ViewBox 坐标矩阵变换,大幅降低重绘开销,实现流畅缩放与平移。理解其显示链路原理后,开发者可结合 PyQt5 构建影像查看器,并针对 16bit 遥感影像、SAR 幅度数据等场景,使用灰度拉伸、对数压缩、伪彩色映射与地理坐标变换完成专业展示。本文还总结了内存占用、

weixin_35706067的博客 203

PyQt5图像显示进阶:从QLabel到QGraphicsView的完整实践指南

在桌面应用开发中,图像显示与交互是高频需求。初学者常从QLabel展示静态图片入手,但当涉及大图缩放、局部拖拽、图元标注等画布式交互时,QLabel的局限便暴露无遗。QGraphicsView作为Qt提供的图形视图框架,通过场景(Scene)、视图(View)与图元(Item)的协作,天然支持坐标变换、缩放平移与事件分发,成为构建图像标注工具、流程图编辑器及地图查看器的理想选择。本文从基础概念出发,剖析GraphicsView的核心原理,对比QLabel、QScrollArea的适用边界,并通过PyQt5示

weixin_42619061的博客 214

PyQtGraph助力PyQt5超大影像显示:遥感与SAR影像流畅缩放平移实践

在遥感与SAR影像处理中,超大尺寸图像的流畅显示一直是工程痛点。传统基于QGraphicsView与QPixmap的方案,在加载数千乘数千像素的图像时往往面临解码缓慢、内存膨胀、交互卡顿等问题。PyQtGraph作为一款高性能的科学绘图库,通过OpenGL纹理映射与自动降采样机制,将图像渲染压力从CPU转移到GPU,实现了大图的近零拷贝上传与实时重采样,从根本上解决了渲染性能瓶颈。其核心组件ViewBox支持灵活的缩放、平移与坐标映射,配合levels参数合理设置,可有效应对遥感影像动态范围大、SAR复数数

weixin_28740299的博客 116

PyQt5开发小工具:利用鼠标滚轮和移动事件,5分钟实现一个图片缩放查看器

本文详细介绍了如何使用PyQt5快速开发一个支持鼠标滚轮缩放和拖拽平移的高交互图片查看器。通过核心事件处理和简单数学计算,开发者可以在5分钟内构建一个专业级的图片浏览器,适用于各种桌面应用场景。文章包含完整的代码实现和优化技巧,特别适合Python开发者快速开发内部工具。

weixin_33725126的博客 353

pyqt5 pyqtgraph 实现超大图片、遥感影像、SAR影像展示、缩放、平移

在使用pyqt5显示超大遥感影像时,程序卡顿特别严重,遂实现了一种思路,将影像分割成较小的瓦片,然后循环显示到QGraphicsItem中,同时在分片的基础上实现了影像的缩放、平移、范围选取和点选取。 可以展示普通图片、遥感影像、SAR影像等,可以选择图层,实现了若干图像质量评价工具

PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形

主要介绍了PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

PyQt5 GraphicsView 图像交互全解析:从QLabel到场景视图图元架构

在Qt图形界面开发中,图形视图框架是一套高性能的场景化管理机制,它通过场景、视图、图元三层架构,将对象绘制、坐标变换与事件交互解耦。不同于QLabel只能静态展示图像,这套体系支持任意缩放、平移、旋转和叠加标注,广泛应用于看图工具、图像标注编辑器、地图预览等需要丰富交互的桌面应用。文章围绕PyQt5中GraphicsView显示图片的完整路径,梳理QGraphicsScene、QGraphicsPixmapItem等核心类的协作关系,讲解锚点缩放、拖拽平移、渲染质量及大图性能优化的工程实践,并总结常见问题排

weixin_33901926的博客 212

ESP32-CAM与Thonny的完美搭配:从烧录到通信的完整流程

本文详细介绍了如何将ESP32-CAM与Thonny IDE完美结合,从固件烧录到通信测试的完整流程。通过硬件连接、MicroPython固件烧录、Thonny环境配置以及摄像头功能开发等步骤,帮助开发者快速搭建高效的物联网开发环境,实现图像采集与无线通信功能。

tomato的博客 1125

《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处(原文链接和作者署名),感谢各位小伙伴啦! 前文参考: 《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及Python环境搭建 《OpenCv视觉之眼》Python图像

qq_42451251的博客 5797

ICG cell如何通过Latch结构消除与门clock gating中的glitch?

本文深入解析了ICG Cell如何利用Latch结构解决传统与门时钟门控中的毛刺问题。通过将电平敏感锁存器与门控与门结合,ICG Cell将使能信号的变化严格限制在时钟低电平的安全窗口内采样和锁存,从而在时钟有效沿期间提供稳定的控制信号,从根本上消除了因信号延迟不同步而产生的glitch,确保了门控时钟的纯净与电路功能的可靠性。

weixin_29234423的博客 469

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

界面开发(5)--- PyQt5实现图像缩放与视频进度控制功能

本文详细介绍了如何使用PyQt5为媒体查看器添加图像缩放与视频进度控制功能。通过QGraphicsView体系实现流畅的图片缩放与拖拽,并利用QSlider和QTimer实现精准的视频进度控制与时间显示,有效提升了应用的专业性和用户体验。

xray4的博客 635

RTL8211F千兆PHY原理图与PCB设计:从手册到量产的完整指南

在工业网关、边缘计算和FPGA/CPU以太网扩展设计中,千兆PHY芯片的稳定运行取决于外围电路的精细设计。RTL8211F(I)作为应用广泛的物理层收发器,其原理图设计涉及电源域划分、时钟与复位时序、RGMII/ MDIO接口匹配以及MDI差分网络等多个环节。正确理解数据手册的阅读顺序,掌握100Ω差分阻抗控制、等长约束和EMI布局技巧,是保证链路可靠性和信号完整性的关键。本文从芯片选型与数据手册解析切入,系统梳理从电源去耦到PCB布局布线的工程实践要点,帮助工程师规避Link不稳定、MDIO读取失败、吞吐

weixin_28721917的博客 352

pyqt实现图片滚轮缩放大小

pyqt实现图片滚轮缩放大小

summerriver1的博客 1255

LAP-D协议概述

Q.921协议由称为LAPD(链路访问协议-D通道),与HDLC的关系密切,它是在ISDN D通道上使用的数据链路协议。 注:http://www.freesoft.org/CIE/Topics/125.htm LAP-D的帧格式 标志、位填充技术和FCS校验计算与HDLC一致。 16位的地址包括C/R字段、SAPI(服务访问点标识)和TEI(端点标识)。TEI用于区分使用相同ISDN...

系统运维 1914

Windows11开机必看:3种方法跳过联网激活(含最新OOBE命令)

本文详细介绍了Windows11新机开箱时绕过联网激活的三种实用方法,包括任务管理器终止进程法、命令行强制终止法和最新的OOBE\BYPASSNRO命令法。特别推荐使用微软官方预留的OOBE命令,操作简单且无副作用,帮助用户快速完成系统设置。

weixin_28366353的博客 1627

重写QLabel类,使QLabel显示的图片可以随鼠标滚轮缩放、随鼠标左键拖动

(3)在 提升的类名称 和 头文件 两栏中填写MyLabel,依次点击添加和提升,在右侧的对象查看器中可以看到该label对象已经属于自定义的MyLabel类;代码自定义了一个继承QLabel类的子类MyLabel,用于显示图像并实现图像交互功能,通过鼠标拖动和滚轮操作,可以实现图像的平移和缩放,提升用户交互体验。(4)为了防止label大小随图片的大小进行变化,在右侧属性编辑器中将label的sizePolicy水平策略和垂直策略均选择Ignored;

Kirito________的博客 1785

RT-DETR-R18 上下文信息融合:引入全局特征提升遮挡目标检测

"""轻量化全局特征提取器(2层Transformer编码器)"""# 特征投影层(将多尺度特征统一维度)# 轻量化Transformer编码器(分组卷积优化)# 全局特征池化(输出 [bs, hidden_dim])# local_features: 多尺度特征列表 [C3, C4, C5],各 [bs, c, h, w]# 统一投影至 hidden_dim 并展平为序列# Transformer编码全局上下文# 全局池化得到全局向量。

走向CTO的路上... 495

[pyqt5]窗口放大缩小图片后让图片某个矩形区域绘制跟随同步缩放

main.py和shape.py处于同一个目录即可。

FL1623863129的博客 1080

零基础入门转录组数据可视化——绘制差异小提琴图(常规)

转录组数据可视化之一,先介绍相关基础知识,其次用实际案例为基础,由浅入深介绍差异小提琴图绘制的全过程,包括内容有相关代码和截屏。

呆猪儿的博客 635

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pyqt5以鼠标为中心,滚动鼠标对图片进行缩放

一、注意Item、Scene、View各自含义 在对图片进行缩放的时候,注意缩放的应该是Item,是图元,而不是Scene或者View。 所以当为了满足以鼠标为中心放大,而需要进行平移时,移动的是图元,图元才是可移动的。同时需要注意moveBy函数的含义,它移动的距离指的是相对item左上角移动距离,原始值为(0,0),向上向右移动为负数。 二、下面举例代码 创建了QgraphicsPixmapItemNew类,继承自QgraphicsPixmapItem,重构了鼠标滚动事件,完整代码如下 fr

JYH_TY的博客 3157

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: mysql 主从同步时忽略指定的表
下一篇: centos 7 修改kubelet工作目录
ZH_CS
博客等级 码龄15年 6粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZH_CS

随缘吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值