Qt实现 内嵌CEF3制作浏览器(尾篇)

Qt cef使用 一,背景 混合开发已经成为了主流,利用Qt+ cef ,界面部分用h5 逻辑用c++,未尝不是一种好办法。QML自带的QtWebEngine 是一种思路。Qt+cef 也是一种思路,并且已经有大神针对Qt将cef进行了封装,那就是QCefView。 二,编译 (1),源码下载 https://cef-builds.spotifycdn.com/index.html#windows32 (2),cmake 编译 win32编译失败,x64可以 (3),demo 演示 程序自带了 一.. 阅读详情
AI摘要

本文介绍了如何将编译好的CEF库与Qt集成,创建一个在Qt窗口内嵌套的浏览器,包括编译licef_dll_wrapper、cef初始化、浏览器创建及Url加载的详细步骤。

在上一篇 Qt实现 CEF制作浏览器(首篇) 中,编译了cefsimple,打开了浏览器,不过该浏览器是demo做例子用的,但是我们的目的是为了嵌入qt窗口中。

本篇将介绍如何将CEF生成的浏览器嵌入到qt中窗口使用。

认为大家有一定基础,所以不再介绍如何在vs中加载licef_dll_wrapper等库和cef头文件等。

目录

一、准备步骤

二、运行效果

三、主要代码

四、完整代码和库:


一、准备步骤

1、编译licef_dll_wrapper库,记得如下把运行库改为多线程DLL(MD),debug下改为MDd。

2、把simple_handler.cc和simple_handler.h拷贝到自己的项目src里,直接使用

3、注释掉以下不需要的函数。

4、找到wWinMain,这是cef初始化的相关代码,拷贝到自己的cef初始化代码中。

二、运行效果

三、主要代码

1、main函数

int main(int argc, char *argv[])
{
	//初始化cef
	bool flag = CefManager::instance()->CefInit();
	if (!flag) {
		return -1;
	}

    QApplication a(argc, argv);
    QtCef w;
    w.show();

    int ret = a.exec();

	CefManager::instance()->CefQuit();

	return ret;
}

对CEF的初始化和退出放在了一个全局静态类中,比较方便去维护和复用,初始化为什么放在main函数之前?因为在我的软件,如果放在其他地方,会出现两个运行程序,目前原因还不清楚。

2、cef初始化代码

bool CefManager::CefInit()
{
	HINSTANCE hInstance = ::GetModuleHandle(NULL);

	// Enable High-DPI support on Windows 7 or newer.
	CefEnableHighDPISupport();

	void* sandbox_info = NULL;

#if defined(CEF_USE_SANDBOX)
	// Manage the life span of the sandbox information object. This is necessary
	// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
	CefScopedSandboxInfo scoped_sandbox;
	sandbox_info = scoped_sandbox.sandbox_info();
#endif

	// Provide CEF with command-line arguments.
	CefMainArgs main_args(hInstance);

	// CEF applications have multiple sub-processes (render, plugin, GPU, etc)
	// that share the same executable. This function checks the command-line and,
	// if this is a sub-process, executes the appropriate logic.
	int exit_code = CefExecuteProcess(main_args, NULL, sandbox_info);
	if (exit_code >= 0) {
		// The sub-process has completed so return here.
		return exit_code;
	}

	// Specify CEF global settings here.
	CefSettings settings;

#if !defined(CEF_USE_SANDBOX)
	settings.no_sandbox = true;
#endif
	settings.multi_threaded_message_loop = true;
	// SimpleApp implements application-level callbacks for the browser process.
	// It will create the first browser instance in OnContextInitialized() after
	// CEF has initialized.
	CefRefPtr<SimpleApp> app(new SimpleApp);

	// Initialize CEF.
	CefInitialize(main_args, settings, app.get(), sandbox_info);

	return true;
}

3、浏览器创建

bool QCefView::createCefBrowser()
{
	RECT rect;
	rect.left = 0;
	rect.top = 0;
	rect.right = qobject_cast<QWidget*>(this->parent())->width();
	rect.bottom = qobject_cast<QWidget*>(this->parent())->height();

	CefWindowInfo windowInfo;
	CefBrowserSettings browserSettings;

	windowInfo.SetAsChild(reinterpret_cast<HWND>(this->winId()), rect);
	CefBrowserHost::CreateBrowser(windowInfo, _browserHandler.get(),
		CefString(_url.toStdWString()), browserSettings, nullptr);

	qDebug() << "CreateBrowser success!" << _url;

	return true;
}

通过CreteBrowser()函数创建浏览器,CefWindowInfo对象的SetAsChild函数设置当前窗口的句柄ID为接下来浏览器的父窗口,从而实现内嵌CEF浏览器到Qt窗口中。

4、加载Url

void QCefView::loadUrl(const QString &url)
{
	if (url.isEmpty()) return;
	_url = url;
	qDebug() << "loadUrl" << _url;

	createCefBrowser();
}

这里直接传入QString字符串,然后调用创建浏览器的接口。

5、界面内嵌cef的父窗口

QtCef::QtCef(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

	qDebug() << "QtCef Init";
	QVBoxLayout * vlayout = new QVBoxLayout;
	vlayout->setSpacing(0);
	vlayout->setMargin(0);
	_cefView = new QCefView(this);
	vlayout->addWidget(_cefView);
	this->setLayout(vlayout);

	_cefView->loadUrl("http://www.baidu.com");
}

通过addwidget将搭载cef浏览器的qt窗口添加到我们需要显示的界面上。

四、完整代码和库:

这只是一个简单的演示demo,功能并不完善,大家可以自行在此基础上进行拓展和完善。

如果有需要功能完善的代码和库的同学可以关注我的微信公众号 回复 CEF浏览器 领取源码:

使用Cef和Qt做一个跨平台的多标签多窗口浏览器 使用Cef和Qt做一个跨平台浏览器? 提示:这篇文章主要介绍 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录使用Cef和Qt做一个跨平台浏览器?前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 阅读详情

相关推荐

Qt6内嵌CEF:实现桌面应用与Web技术的深度集成

在现代桌面应用开发中,混合架构已成为主流趋势,它结合了原生框架的稳定性和Web技术的灵活性。其核心原理是通过嵌入浏览器内核,在原生应用中渲染Web内容,并建立双向通信机制。这种技术方案的价值在于能够复用成熟的Web生态,加速UI开发,同时保持对本地系统资源的访问能力。在应用场景上,它广泛用于数据可视化仪表盘、客户端管理后台、开发工具等需要复杂交互界面的桌面软件。本文聚焦于Qt6框架与CEF(Chromium Embedded Framework)的深度集成,详细解析了如何将CEF这个高性能的浏览器内核无缝嵌

weixin_27918373的博客 236

CEF 网页中内嵌qt窗口

是的,你没看错,是在浏览器中嵌入窗口,其实你想一想可能没必要,确实也是,在本地窗口中中嵌入浏览器是再正常不过的了,但是如果你有一个需求,需要使用到本地窗口,例如一些绘制操作,这边博客的大神使用的是PPAPI+skia实现简单的涂鸦功能 (https://blog.youkuaiyun.com/foruok/article/details/50547737),PPAPI具体我也不是很了解,应该是谷歌...

leapmotion的博客 6652

使用Qt实现嵌入CEF浏览器的编程

在本文中,我们将学习如何使用Qt框架实现嵌入CEF(Chromium Embedded Framework)浏览器的功能。CEF是一个功能强大的开源项目,它允许我们将基于Chromium的浏览器嵌入到我们的应用程序中。通过使用CEF,我们可以在我们的Qt应用程序中展示Web内容,并与Web页面进行交互。在实际的应用程序中,你可能需要处理更多的细节和功能,例如处理CEF事件、加载URL、与Web页面进行交互等。在Qt项目的.pro文件中添加CEF头文件和库的路径。在主窗口的类中,添加一个成员变量。

ByteWhizX的博客 2079

Qt实现 内嵌CEF制作浏览器(首篇)

介绍 cef支持跨平台,是基于Chromium的开源浏览器控件,全称Chromium Embedded Framework。 本文主要介绍如何下载cef以及编译windows下的cef项目,并运行查看浏览器显示效果。 QT内嵌CEF优势: Qt自带QWebEngine模块,可以快速实现浏览器,但是在实际使用中,在某些AMD显卡电脑运行使用了QWebEngine的qt软件, 会卡顿甚至奔溃,坑还是比较多的。选择cef就可以避免这种问题。 开发准备 cef下载网址:http://opensource.sp

c_shell_python的博客 2万+

如何在C++ QT 程序中集成cef3开源浏览器组件去显示网页?

本文详细介绍如何在C++ QT 程序中集成Google开源的嵌入式浏览器组件cef3。

dvlinker的技术专栏 1万+

QT 应用程序中集成浏览器

在很多情况下,我们需要在应用程序中集成浏览器,比如应用程序界面是使用 H5 页面开发,或者我们的应用程序需要访问 Web 网站。应用程序中集成浏览器,并不一定是需要一个具有地址栏、多标签等全功能的浏览器,大多数情况下只是需要一个能够现实 H5 页面的浏览器外壳。在 QT 应用程序中集成浏览器,最简单的方法是使用 QtWebEngine。QtWebEngine 是 Qt 框架中的一个模块,用于在应用程序中集成现代 Web 技术。

云水木石 1970

Qt6内嵌CEF

qt内嵌CEF内核

weixin_45551020的博客 3354

Qt6集成CEF3 64位Web浏览器控件实战Demo

在现代桌面应用程序开发中,嵌入浏览器能力已经成为提升用户体验的重要手段。Chromium Embedded Framework(简称 CEF)正是为此而生的跨平台框架,而 CEF3 是其第三代版本,具有更高的性能、更强的扩展性与更完善的 API 接口。本章将深入介绍 CEF3 的核心架构、组件模型及其与本地代码的交互机制,为后续将 CEF3 集成到 Qt6 项目中奠定理论基础和技术准备。

weixin_42389113的博客 1110

【亲测免费】 QT内嵌CEF3完整示例

QT内嵌CEF3完整示例 【下载地址】QT内嵌CEF3完整示例 本仓库提供了一个关于如何在QT应用中内嵌 Chromium Embedded Framework (CEF3) 的完整实例。CEF3是一个流行的开源框架,允许开发者在自己的应用程序中嵌入Chromium浏览器引擎。此项目特别适合那些希望在QT环境下利用现代W...

gitblog_09765的博客 829

QCefView:深入实现CEF嵌入Qt应用

是一个开源的框架,它提供了将 Chromium 浏览器内核嵌入到应用程序中的能力。CEF 允许开发者在自己的软件中嵌入一个基于 Chromium 的浏览器窗口,可以显示 Web 内容。CEF 的重要性在于其提供了快速、可靠和定制化的Web内容显示,这对于那些需要集成Web功能的应用程序来说非常关键。CEF 在现代 Web 应用中的角色体现在多个方面:跨平台能力。

weixin_42511373的博客 2068

QT内嵌CEF3,完整例子。

QT内嵌CEF3,完整例子。需要自已设置 qt环境。修改下载分数为1分。 设置vs的qt环境就可以直接编译运行了。

QT集成CEF05-嵌入到QT窗体

回顾一下CEF 的浏览器窗口是如何创建出来的: SimpleApp实现了CefBrowserProcessHandler 接口 CefBrowserProcessHandler 接口中有一个OnContextInitialized 回调,它在CEF创建 context 初始化完毕后被回调。 SimpleApp 实现了OnContextInitialized 回调,代码如下: void SimpleApp::OnContextInitialized() { CEF_REQUIRE_UI_THR

paopao_wu的专栏 4504

MediaCodec视频解码流程详解及参考demo

本文主要讲解mediacodec的视频解码流程,及demo参考例子。

分享音视频技术 7872

在QT中绽放Web力量:CEF3内嵌实战指南

在QT中绽放Web力量:CEF3内嵌实战指南 【下载地址】QT内嵌CEF3完整示例 本仓库提供了一个关于如何在QT应用中内嵌 Chromium Embedded Framework (CEF3) 的完整实例。CEF3是一个流行的开源框架,允许开发者在自己的应用程序中嵌入Chromium浏览器引擎。此项目特别适合那些希望在...

gitblog_09706的博客 463

BALM2深度解析 | 港大MARS实验室如何用点簇革新激光BA?

本文深度解析了港大MARS实验室提出的BALM2方案如何通过点簇技术革新激光BA(Bundle Adjustment)处理。BALM2将点云数据聚合为点簇,显著提升计算效率,实测显示其计算耗时仅为传统方法的1/20。文章详细介绍了点簇的核心原理、二阶优化方法及与传统方法的性能对比,展示了其在激光SLAM领域的突破性应用。

weixin_29212867的博客 152

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 172

【亲测免费】 在QT应用中轻松嵌入CEF3:一个完整的开发指南

在QT应用中轻松嵌入CEF3:一个完整的开发指南 【下载地址】QT内嵌CEF3完整示例 本仓库提供了一个关于如何在QT应用中内嵌 Chromium Embedded Framework (CEF3) 的完整实例。CEF3是一个流行的开源框架,允许开发者在自己的应用程序中嵌入Chromium浏览器引擎。此项目特别适合那些希...

gitblog_09813的博客 829

CATIA二次开发——遍历几何图形集下的轴系及控制轴系生成位置

CATIA二次开发——轴系相关问题1.遍历几何图形集下的轴系2.解决轴系生成位置的问题 1.遍历几何图形集下的轴系 近期遇到的问题:遍历轴系的时候发现,AxisSystem属性的轴系只有放在轴系集合下,才能被找到,放在几何图形集或其他位置均不能被找到。本来想遍历几何图形集下的轴系元素,但是发现没有对应的属性,只能查找 几何图形集、几何元素、草图等元素,无法直接遍历轴系。 解决办法:(加入选择集,在选择集中筛选轴系类型) HybridBody axisHB = activePart.HybridBodies

WorkMan的博客 2730

QT+CEF(Chromium嵌入式框架)环境搭建,CEF库libcef_dll_wrapper.lib编译

上一章使用qt自家的QWebEngineView实现浏览器,存在一定兼容性和稳定性问题: https://blog.youkuaiyun.com/weixin_40355471/article/details/120698537 本章将使用开源的CEF(Chromium嵌入式框架)实现qt内嵌浏览器,包括CEF库libcef_dll_wrapper.lib的编译、QT下调用库实现内嵌浏览器。 使用的环境是cmake-3.21.0-rc3+qt5.13.0+vs2017. 资源下载 cmake官网下载地址,选择Windo

weixin_40355471的博客 4783

飞牛fnNAS同步微信微信聊天记录

微信聊天记录如何备份到NAS?本文介绍了利用NAS虚拟机和同步工具实现微信记录自动备份的方法。通过在NAS上搭建"云电脑"长期运行微信PC端,并配置微力同步将聊天记录文件夹自动同步到NAS存储,解决了传统电脑备份的安全性问题。操作步骤包括:1)在NAS上安装虚拟机系统;2)登录微信PC端并同步手机记录;3)配置同步工具将微信记录文件夹同步到NAS。该方法尤其适合不常使用PC微信的用户,可实现记录永久保存和远程查看,更换手机时也能快速恢复历史记录。

dgnankai的专栏 4302

知识图谱:综述

第一种理解:知识图谱本质上是语义网络。本体论是语义网络中最重要的一个要素。第二种理解:知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成。课程以第二种理解为主。

u013250861的博客 478

Qt内嵌IE实现与JavaScript交互

工作需要同时内嵌Chrome、IE,相较于IE,CEF开源简单多了,调用IE费了点功夫研究。 重点记述  在 qt 中,实现 js 与  客户端之前互动相互调用,代码资料根据网站整理并测试 内嵌调用IE 需要引入 QT += axcontainer (具体调用 IE 略过) 1、qt 调用 js,该调用方法比较简单 QAxObject *document = ui-&gt;axWidge...

beyond0851的专栏 2619

多模态轨迹预测:行人、车辆的交互式推理

多模态轨迹预测:行人、车辆的交互式推理 ,人工智能,计算机视觉,大模型,AI,本文围绕多模态轨迹预测中行人与车辆的交互式推理展开,介绍了其定义,即综合多种信息预测交通参与者未来多种轨迹。涵盖基础概念如轨迹表示、模态、交互关系,技术框架包括数据处理、特征提取、预测模型(物理、机器学习、深度学习模型等)及结果评估。还探讨了交互式推理方法、面临的不确定性处理等挑战、应用场景、未来发展方向、相关工具及实际案例,展现了该技术在智能交通等领域的重要性与发展潜力。​

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

QT6 嵌入 cef 浏览器 (VS2022 )

VS2022不支持32位的cef版本,各种编译问题和运行问题,切换64位成功。需要完整环境和代码请下载资源。

hellozp的专栏 724

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2542

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Qt嵌入浏览器开发——下载编译

首先明确一下动机:为什么要用Qt自己实现一个浏览器? 简而言之,就是希望实现一个介于B/S和C/S之间的混合架构,以适应一些前端展示信息需要频繁更新的生产系统。这种混合架构的优势在于: 相较于C/S架构,对于需要频繁更新的展示部分,只需要在服务端更新相应的前端文件即可,不需要更新所有的终端软件——这同时也是B/S架构的优势; 而传统的B/S架构使用市面上现有的浏览器,无法满足很多生产系统对稳定性的要求;此外,市面上现有的浏览器难以对所在终端的底层系统进行控制; 利用Qt的跨平台特性,可以比较容易地实现对不同

ZLOZL的博客 2627

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 0x752940B2(KernelBase.dll)(xxx.exe中有未经处理的异常:0xE0000008)
下一篇: 大白话描述如何理解多线程
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值