Qt学习:项视图类之QListWidget

【Qt笔记】QListWidget控件详解 QListWidget 是 Qt 框架中一个非常实用的控件,它提供了一个基于项目的列表视图,允许用户以列表形式展示和交互数据项。 阅读详情

        类QListWidget在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类QListWidgetItem的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用QListWidget的成员函数addItem()

向列表添加一个数据项.

        在ListWidget控件的properties选项中,一般常对以下选项进行设置。

              name:            该控件对应源代码中的名称;

              font:            设置表格内部的字体;

              count:           保存项目的数目;

              currentRow:      保存当前项目的行;

              sortingEnabled:  是否对item排序。

        以下是一些常用的成员函数:

1) QListWidget::QListWidget ( QWidget *parent = 0 )       // 构造一个父对象为parent的ListWidget。

2) void QListWidget::addItem ( const QString & label )     // 添加一个新的项目,在新添加的项目中添加label标签。

3) void QListWidget::addItem ( QListWidgetItem *item )   // 添加项目item。

4) void QListWidget::addItems ( const QStringList & labels )   // 添加一列项目。

5) void QListWidget::clear () [slot]   // 清除该ListWidget中的所有项目。

6) QListWidgetItem *QListWidget::currentItem () const    //返回当前活动项目。

7) void QListWidget::editItem ( QListWidgetItem *item )    //如果项目item是可编辑的,开始编辑项目item。

8) QList<QListWidgetItem *> QListWidget::findItems( constQString & text, QT::MatchFlags flags ) const  //查找匹配字符串text的项目,并返回查找结果。

9) void QListWidget::insertItem ( int row, QListWidgetItem *item )    //在行row处插入项目item。

10) void QListWidget::insertItem ( int row, const QString &label )        //这是一个重载函数,函数功能同9),在行row处插入标签为label的新项目。

11) voidQListWidget::insertItems ( int row, const QStringList & labels )    //在行row处插入一列项目。

12) QListWidgetItem *QListWidget::item ( int row ) const    //返回行row处的项目,如果行row处没有项目则返回0。

13) QListWidgetItem*QListWidget::itemAt ( const QPoint & p ) const    //返回点p处的项目。

14) QListWidgetItem *QListWidget::itemAt ( int x, int y ) const    //返回坐标(x,y)处的项目。

15) QWidget *QListWidget::itemWidget ( QListWidgetItem *item ) const    //返回项目item处显示的控件。

16) QListWidgetItem *QListWidget::takeItem ( int row )   // 移除行row处的项目,并返回项目控件。

17) void QListWidget::removeItemWidget ( QListWidgetItem *item )    //删除项目item处的控件。

18) int QListWidget::row ( const QListWidgetItem *item ) const    //返回项目item所在的行。

19) QList<QListWidgetItem *> QListWidget::selectedItems ()const    //返回所有被选中的项目的控件。

20) void QListWidget::setCurrentItem ( QListWidgetItem *item )    //设置项目item为当前项目。

21) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //设置控件widget为项目item的显示控件。

22) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //这是个重载函数,函数功能同23)。

23) voidQListWidget::sortItems ( QT::SortOrder order = QT::AscendingOrder )    //把项目按照order进行排序。

下面给出一个例子,效果如下图:

 

        代码如下:

 

//flowchartsymbolpicker.h
#ifndef FLOWCHARTSYMBOLPICKER_H
#define FLOWCHARTSYMBOLPICKER_H

#include <QDialog>
#include <QMap>
#include <QIcon>

class QDialogButtonBox;
class QListWidget;

class FlowChartSymbolPicker : public QDialog
{
    Q_OBJECT
    
public:
    FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                          QWidget *parent = 0);

    int selectedId() const { return id; }
    void done(int result);
    ~FlowChartSymbolPicker();

private slots:
    void message();

private:
    QIcon iconForSymbol(const QString &symbolName);

    QListWidget *listWidget;
    QDialogButtonBox *buttonBox;
    int id;
};

#endif // FLOWCHARTSYMBOLPICKER_H

//flowchartsymbolpicker.cpp
#include <QListWidget>
#include <QListWidgetItem>
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QMessageBox>

#include "flowchartsymbolpicker.h"

FlowChartSymbolPicker::FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                                             QWidget *parent)
    : QDialog(parent)
{
    id = -1;

    listWidget = new QListWidget;
    listWidget->setIconSize(QSize(60,60));
    listWidget->setEditTriggers(QAbstractItemView::AnyKeyPressed);

    QMapIterator<int, QString> i(symbolMap);
    while (i.hasNext()) {
        i.next();
        QListWidgetItem *item = new QListWidgetItem(i.value(), listWidget);
        item->setIcon(iconForSymbol(i.value()));
        item->setData(Qt::UserRole, i.key());
    }

    buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |
                                     QDialogButtonBox::Cancel);
    connect(buttonBox, SIGNAL(accepted()), this, SLOT(message()));
    connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(listWidget);
    layout->addWidget(buttonBox);
    setLayout(layout);

    setWindowTitle(tr("Flowchart Symbol Picker"));
}

void FlowChartSymbolPicker::message()
{
    QMessageBox::about(this, tr("AHA"),tr("Thanks"));
}

void FlowChartSymbolPicker::done(int result)
{
    id = -1;
    if (result == QDialog::Accepted) {
        QListWidgetItem *item = listWidget->currentItem();
        if (item)
            id = item->data(Qt::UserRole).toInt();
    }
    QDialog::done(result);
}

QIcon FlowChartSymbolPicker::iconForSymbol(const QString &symbolName)
{
    QString fileName = ":/images/" + symbolName.toLower();
    fileName.replace(' ', '_');
    return QIcon(fileName);
}

FlowChartSymbolPicker::~FlowChartSymbolPicker()
{   
}

//main.cpp 
#include "flowchartsymbolpicker.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMap<int, QString> map;
    map.insert(77, QObject::tr("7"));
    map.insert(78, QObject::tr("11"));
    map.insert(79, QObject::tr("12"));
    map.insert(80, QObject::tr("13"));
    map.insert(81, QObject::tr("14"));
    map.insert(82, QObject::tr("15"));
    map.insert(83, QObject::tr("16"));
    map.insert(84, QObject::tr("ali5"));
    map.insert(85, QObject::tr("l5"));
    map.insert(86, QObject::tr("oh5"));

    FlowChartSymbolPicker window(map);
    window.resize(300, 300);
    window.show();
    
    return a.exec();
}

 

        构造函数接收一个QMap关联容器对象,这个容器存储了每个项的ID和名字,在构造函数中我们遍历这个容器的每个元素,并用该元素的键和值设置QListWidgetItem对象的名字和ID。QListWidget有几个角色(role),每个角色都有一个关联的QVariant,最常用的角色有:Qt::DisplayRole, Qt::EditRole, Qt::IconRole, Qt::UserRole,并且这些角色都有方便的设置和获取函数[setText(), setIcon()]等。通过指定一个大于等于Qt::UsetRole的值就可以定义自定义的角色。在本例中,使用Qt::UserRole存储每一个项的ID。

        Done()函数式由QDialog重新实现的。当用户单击OK或者Cancel按钮时,就会调用它。如果用户单击OK,就获得相应的项,并且使用data()函数提取ID。如果对项的文本感兴趣,则可以通过调用item->data(Qt::DiaplayRole).toString()或者更为方便的item->text()来获取文本。

        默认情况下,QListWidget是只读的。如果想让用户编辑这些项,则可以使用QAbstractItemView:: setEditTriggers()设置这个视图的编辑触发器。例如:QAbstractItemView::AnyKeyPressed这个设置值的意思是:用户只要一开始输入就进入项的编辑状态。类似的,也可以提供一个Edit(编辑)按钮(还可以提供Add按钮和Delete按钮),同时使用信号槽连接,这样就可以使用程序来控制编辑操作了。

        我们还可以设置viewModel这个参数,来确定使用不同的视图进行显示。比如,我们使用下面的语句: 
 
        listWidget->setViewMode(QListView::IconMode);
        程序的效果如图:

 

 

 


 

【QT】——QListWidget的使用 QListWidget 是qt中的列表框控件,它用于显示多个列表项,列表项对应的类是QListWidgetItem. 列表项中可以同时包含图片和文字。 阅读详情

相关推荐

【Qt控件之QListWidget】介绍及使用,利用QListWidget、QToolButton、和布局控件实现抽屉式组合控件

`QListWidget`是一个方便的类,类似于`QListView`提供的列表视图,但使用经典的基于项目的接口来添加和删除项目。`QListWidget`使用内部模型来管理列表中的每个`QListWidgetItem`。 对于更灵活的列表视图小部件,请使用具有标准模型的QListView类。

FreeLikeTheWind的博客 1万+

[QT_007]Qt学习之QListWidget控件详解

QListWidget控件详解

kongcheng253的博客 1万+

【嵌入式——QT】QListWidget

嵌入式-QT-QListWidget

weixin_39723539的博客 3406

Qt中QListWidget/QListWidgetItem详解

Qt中QListWidget/QListWidgetItem详解

aoxuestudy的专栏 9238

QT中QListWidget

Qt 中用于项(Item)处理的组件有两类,一类是 Item Views,包括 QListView、QTreeView、 QTableView、QColumnView 等;另一类是 Item Widgets,包括 QListWidget、QTreeWidget 和 QTable Widget。 Item Views 基于模型/视图(Model/View)结构,视图(View)与模型数据(Mode...

conimade的博客 3398

「QT」QSS样式表 之 QListWidget树形窗口类

通过QSS样式表,我们可以轻松地自定义及其列表项的外观,包括背景颜色、边框、字体、项目间距等。这不仅可以提升用户界面的美观性,还可以增强用户体验。本文详细介绍了如何为编写QSS样式表,并提供了示例代码以供参考。希望本文能够帮助你更好地理解和应用QSS样式表来定制控件。何曾参静谧的博客。

何曾参静谧的博客 1406

Qt学习:项视图类之QSortFilterProxyModel和QListWidget

QSortFilterProxyModel是一个方便我们对模型操作(排序)的类,它是这样工作的:QSortFilterProxyModel封装一个已经存在的模型,我们可以把这个模型叫做源模型,即源模型为QSortFilterProxyModel提供数据,QSortFilterProxyModel利用视图类来观察源模型的数据并提供对源模型的数据的操作。其实就如这个类的名字说的那样,它只是一个“代理”

bcs_01的专栏 2984

Qt学习笔记-----QListWidget,QTableWidget和QTreeWidget

在MV架构中,Qt提供了三个可以直接使用的视图类用于呈现模板中的数据,分别是QListView,QTableView和QTreeView。不过还没完,紧接着Qt又提供了基于这三个类设计的更方便的类,分别是QListWidget,QTableWidget,QTreeWidget。 这三个类分别继承于上述三个视图类,实现了基本的函数,可以实现添加和删除等基本的功能,同时它们使用内部的model来管理

一个程序渣渣的小后院 5543

【Qt开发】多元素类控件(一)-> QListWidget

Qt框架中的QListWidget是一个强大的列表控件,支持文本、图标等丰富内容展示。它提供多种视图模式(列表/图标)、选择方式(单选/多选)、编辑和拖放功能,简化了列表数据的增删改查操作。通过信号槽机制响应用户交互,如选中项变化、双击等事件。QListWidgetItem类支持设置字体、图标、对齐等属性。示例代码展示了如何实现列表项的添加、删除和选中事件处理。该控件适用于中小型数据列表场景,能快速构建直观的用户界面。

枫叶丹4的博客 1400

【QT开发】列表控件QListWidget类详解及实战应用

QListWidget是Qt提供的一个功能强大且灵活的列表控件类,通过本篇文章的学习,你应该对QListWidget有了全面的理解,能够在自己的项目中正确使用它。QListWidget在用户界面中帮助你更好地展示和管理二维列表数据,实现交互式和响应式的数据展示,有助于创建用户友好和高效的文件列表、项目列表、数据列表等应用场景。

科技改变人类,技术成就未来 2033

【QT】QListWidget控件的使用

本文介绍QListWidget 控件的使用,包含QListWidget类常用的属性和方法,QListWidget列表框的信号和槽,QListWidget 类常用操作示例(初始化列表、插入项、删除当前项和清空列表、遍历并选择项、QListWidgetItem常用信号等操作),QListWidget 类简单应用等内容。

u011671745的博客 1797

【Qt之模型视图】5. Qt库提供的视图便捷类

Qt提供了一些便捷的视图类,如QListWidget提供项目列表,QTreeWidget显示多级树结构,QTableWidget提供单元格项的表格。每个类都继承了QAbstractItemView类的行为,QAbstractItemView类实现了项目选择和标题管理的通用行为。这三个类使用起来方便,但适合于少量数据的存储与显示(存储个几万、十几万的数据还可以),因为它们三个没有将视图和模型进行分离,因此没有视图类灵活。而且这三个类也不能和模型一起使用。

FreeLikeTheWind的博客 2787

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

Qt学习 之 UI视图类(一) QListWidget

类QListWidget在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类QListWidgetItem的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用QList

Mr.Phoebe的专栏 3271

Linux内存优化:KSM技术原理与实践指南

内存共享是提升虚拟化环境资源利用率的关键技术,其核心原理是通过识别相同内容的内存页进行合并。Linux内核的KSM(Kernel Samepage Merging)机制采用红黑树数据结构管理内存页,通过多级哈希比较算法实现高效合并。该技术能显著降低物理内存消耗,提升CPU缓存命中率,特别适用于运行大量相似虚拟机实例的场景。在容器化和云计算环境中,KSM与NUMA优化、内存气球等技术协同,可实现40%-60%的内存节省。典型应用包括金融云平台的高密度虚拟机部署,以及Kubernetes集群的基础镜像优化。

weixin_28730353的博客 369

LVDS系列11:Xilinx Ultrascale系可编程输入延迟(一)

按照IDELAYCTRL的参考时钟频率可以准确计算获取到,如200M参考时钟抽头分辨率为78ps,Ultrascale系列相对于7系列架构大改,体现便是U/U+系列的抽头增加到512个,同时每个抽头的分辨率就无法像7系列那样能得到一个准确的值,是一个波动的范围值,抽头分辨率随着工艺温度电压的变化而变化。EN_VTC:电压温度补偿开启的使用信号,COUNT模式下不能使用,必须保持为0,TIME模式下需要使用,在延迟工作时要启用温度电压补偿,在修改抽头值时需要关闭温度电压补偿,修改完后启用;

weixin_38828382的博客 1941

Qt QListWidget 总结

Qt QListWidget 总结

enyp80的博客 1145

IBM 3560M3 R5 坏盘更换记录

公司一台老旧 3650M3在日常巡查过程中发现硬盘报错

ddriv的博客 3944

Qt模型视图框架:QListWidget

一、描述 QListWidget 是一个方便的类,它提供类似于 QListView 提供的列表视图,但具有用于添加和删除项目功能的界面。 QListWidget 使用内部模型来管理列表中的每个 QListWidgetItem。 有两种方法可以将项目添加到列表中: 可以使用列表小部件作为其父小部件来构建。 QListWidget *listWidget = new QListWidget(this); new QListWidgetItem(tr("Oak"), listWidge

友善啊,朋友的博客 1953

如何实现电路级别的CDM ESD防护

采用先进制程的CMOS工艺,可能具有比以前更薄的栅极氧化物和更大的芯片尺寸,大的衬底可能积累大量的电荷,导致CDM事件期间的高ESD放电峰值电流。传统CDM保护器件使用栅极接地NMOS被添加到输入级的栅极。然而,这种方法通常会在信号路径上引入显著的寄生电容,这不适合RF应用。

weixin_42693135的博客 2502

BrepNet实战:5分钟搞定三维CAD模型的加工特征识别(附Python代码)

本文详细介绍了BrepNet在三维CAD模型加工特征识别中的实战应用,通过Python代码演示了从环境搭建到模型训练的全流程。BrepNet基于边界表示(BRep)的深度学习框架,能够高效识别加工特征,显著提升工业设计和智能制造领域的效率。文章还提供了性能优化和部署建议,帮助开发者快速实现AI驱动的几何特征识别。

weixin_29044713的博客 507

Qt/C++ 如何删除QListWidget的指定项

本文简单介绍了一种如何在QListWidget删除匹配指定字符串的项的方法。

Duran.L的专栏 4033

基于Gardner环的QPSK定时同步MATLAB仿真:四倍采样与多场景性能分析

本文详细介绍了基于Gardner环的QPSK定时同步MATLAB仿真方法,重点分析了四倍采样技术在定时同步中的应用与性能优化。通过MATLAB代码实例展示了Gardner环的实现原理、多场景性能分析及常见问题解决方案,为数字通信系统的定时同步设计提供实用参考。

weixin_29083475的博客 373

Qt4_使用项视图的简便类

使用项视图的简便类 使用。的项视图中那些方便的子类通常要比定义一个自定义模型简单得多,并且姐果我们不需 要由区分模型和视图所带来的好处时,这种方法也是比较合适的。 Flowchart Symbol Picker 演示了一个只读的QListWidget。先从一个允许用户在列表中选择流程图符号的简单对话框开始。每个项都由一个图标、一段文本和一个唯一的ID组成。 FlowChartSymbolPicker.h #ifndef FLOWCHARTSYMBOLPICKER_H #define FLOWCHARTSYM

qq_36314864的博客 268

Dify 实战:使用 Firecrawl 插件高效爬取微信公众号文章

本文介绍了如何利用Dify平台和Firecrawl插件构建微信公众号文章自动化采集系统。Dify作为开源LLM应用开发平台,结合Firecrawl的智能网页爬取能力,可轻松实现文章爬取、清洗和结构化存储。文章详细讲解了环境部署、插件安装以及工作流创建过程,通过可视化节点操作即可完成从URL输入到Markdown格式输出的全流程。该方案无需复杂代码,能有效解决反爬、动态渲染等问题,适用于知识库构建、模型训练等场景,显著提升开发效率。

SmartSi 1826

深度学习工具包 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")

上一篇: Qt学习:项视图类
下一篇: Qt学习:项视图类之QTableWidget
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值