如何开发Chrome扩展程序

Google Chrome扩展程序应用与开发 Chrome扩展程序是Google Chrome浏览器的一项创新功能,它通过允许开发者创建小型的应用程序来增强浏览器的功能和用户体验。扩展程序通常小巧、高效,并且通过Chrome Web Store提供,使得安装和管理变得十分便捷。扩展程序包括多种类型,如广告拦截器、密码管理器、页面翻译器等,它们为用户提供丰富的个性化选项。开发者可以使用HTML, CSS, JavaScript等技术开发扩展程序,这降低了开发难度,使得更多的人能够参与到扩展程序的创造中来。 阅读详情

我真的很喜欢Chrome浏览器,这种感觉是在我发现创建Chrome扩展竟然是如此的容易之后才有的。如果你懂得基本的HTML、CSS、JavaScript,那你就有了扩展Chrome浏览器需要的所有知识。这篇文章将会是一个让你对Chrome扩展有基本了解的速成班,但我在这个方面也不敢自称是专家,如果你在文章中发现任何错误,请一定让我知道。

开始

为了着手创建你的扩展程序,你只需要为你的扩展创建一个文件夹。程序所必须的文件只有manifest.json.,不过也推荐准备一些图片用作图标,和至少一个JavaScript以提供功能。一般来说还会包含HTML文档、样式表、图片等等其他的资源。

Manifest文件

每个扩展都必须在其根目录下包含一个manifest.json文件。
这个文件里面声明了扩展的名称、版本、权限、设置选项和其他的一些和扩展相关的元数据。Manifest v1早在Chrome 18便已被弃用,而且会根据这个时间表 逐渐淘汰使用Manifest v1的扩展。如果你在参考一些旧扩展的Manifest文件的话,请确认添加"manifest_version": 2.

Google发布的Manifest v2中支持的域

后台页

大多数扩展都会在其manfiest.json文件内有这样的内容:

{
  "background": {
    "scripts": ["index.js", "other.js"]
  }
}

这一段代码指定了两个需要被加载而且要保持在后台运行的脚本,这些脚本会在扩展的后台页运行。后台页是一个在扩展的进程中生成并运行的页面,存在时间会和扩展的生命周期等长。后台页可用来作为扩展的其他界面的控制器,用来维护某个状态或者保持某些活动。如果你需要用后台页来声明一些标记来用,可以把一个HTML文件名指定给page选项。 

事件页

后台页会从扩展被加载的时候被装载,而且会一直留在内存里。这是因为如果有些状态需要被长时间维护,或者需要被扩展的其他部分访问。但是如果你没有这个需求,那么应该尽可能的使用事件页。事件页其实只是相当于一个包含了”persistent”: false条目的后台页,这一行语句告诉Chrome可以不需要把后台页保留在内存里。相对来说,事件页也会在最开始被装载,但是一旦指定的脚本运行完毕,事件页便会从内存卸载,而且会在需要的时候被再次加载(比如用来回应某些操作)

以上便是在为扩展添加功能之前所需要知道的。

交互

利用Google提供的大量API,你的扩展与浏览器交互或者为用户提供功能都变得方便。

chrome.* APIs

Chrome的程序和扩展程序都非常喜欢调用chrome.* APIs,这些API可以让你通过不同的方式来操控浏览器,API通常会在后台脚本里面被调用,这是我找到的一些常用API:

chrome.tabs 标签页:新建、刷新、关闭、访问和操控标签页

chrome.history 历史:访问用户浏览历史

chrome.bookmarks 书签:添加、编辑、移除和搜索用户书签

chrome.events 事件:监听或者管理浏览器发生的事件

chrome.commands 命令:添加或者改变键盘命令

chrome.contextMenus 右键:添加条目到右键下文菜单

chrome.omnibox 多功能框(地址栏):添加多功能框关键字,使用户可以向扩展发送指令或者激活扩展

其他API

Chrome程序和扩展程序通常也会用到其他的API,包括如本地存储、地理位置、缓存、画布等新型的HTML5 API。你也可以用普通的JavaScript或者webkit API来实现。


声明权限

有些Chrome API的功能必须要在manifest.json文件中声明相关权限才能被调用,通过在permissions 域中把值设成相应权限名称,或者是通识符组成的数组。

{
  "permissions": [
    "contextMenus",
    "tabs",
    "https://google.com/*",
    "https://developer.mozilla.org/*"
  ]
}

在这一段声明代码中,数组中的头两个字符串是分别用来为chrome.contextMenus和chrome.tabs  的API授权的,最后的两个字符串则是用来匹配以 https://google.com/ 和 https://developer.mozilla.org/ 开头的地址。 

用户界面

Chrome扩展的用户界面有着严格的限制,但是根据扩展的需要却可以有不同形式的界面。 

浏览器按钮

浏览器按钮允许你在右上角放置一个的16 x 16像素的图标,如果扩展应用的界面是全局的,而不是针对某个页面,那就应该使用浏览器操作。如果要使用浏览器按钮,你必须在manifest.json中的browser_action域中做如下声明:

{
  "browser_action": {
    "default_icon": {                    
      "19": "images/icon19.png",
      "38": "images/icon38.png"
    },
    "default_title": "tooltip text here",
    "default_popup": "popup.html"
  }
}

一个浏览器按钮可以有一个图标、提示、文字标记和一个弹出内容,文字标记可以将极少的文字(4字符)动态的覆盖在浏览器操作的图标上,你也可以通过chrome.browserActionAPI来对浏览器按钮相关的事件做出反应。 

页面按钮

页面按钮允许你在多功能栏(地址栏)右边添加一个按钮,其实他和浏览器按钮很相似,区别之处在于页面按钮是专门用来处理某些指定的页面的。页面按钮必须在manfiest.json中声明, page_action域的使用和浏览器按钮一样。页面按钮可以通过chrome.pageAction API控制,可以在不同的标签页中灵活的显示或者隐藏。页面按钮也可以设置图标、提示和弹出内容,和浏览器按钮不同的是其没有文字标记功能。 

右键菜单

右键菜单是另一个提供用户界面,方便用户和扩展交互的方式。Chrome的右键菜单通过右键激活,但根据激活内容的变化,菜单内容也会做相应改变。

chrome.contextMenusAPI允许你向为不同内容激活的右键菜单添加项目,若要使用此API,则在manifest.json文件中声明相应的contextMenus权限。

目前可用的激活内容有:all, page, frame, selection, link, editable,image, video,  audio

对应:所有内容、页面、框架、选择、链接、可编辑、图像、视频、音频,以下这个例子需要contextMenus 和tabs权限,他可以使扩展为右键菜单添加一个根项目,然后添加一个子菜单,用来复制当前的页面到一个新选项卡。

var root = chrome.contextMenus.create({
   title: 'MyExtension',
   contexts: ['page']
}, function () {
   var subMenu = chrome.contextMenus.create({
       title: 'Duplicate Tab'
       contexts: ['page'],
       parentId: root,
       onclick: function (evt) {
           chrome.tabs.create({ url: evt.pageUrl })
       }
   });
});

多功能框

Chrome把地址栏/搜索栏称为多功能框,通过chrome.omnibox API,他可以让扩展有另一个界面。通过API 可以设置一个特定的激活字符串,当这个字符串被键入多功能框时扩展便可以对其做出反应。在manifest.json中做如下声明:

{
  "omnibox": {
    "keyword": "ext-"
  }
}

这部分代码会把ext-作为激活字符串,当用户键入ext-并按下SPACE键或者TAB键时扩展会被激活。激活字符串必须通过manifest.json文件声明,故也不能通过JavaScript来更改。用户可以通过右键单击多功能框—–修改搜索引擎来更改。激活字符串是大小写敏感的,同时想为一个扩展声明多个激活字符串也是不可以的。

chrome.omnibox API可以让你添加激活字符串被键入之后的修改或者输入的事件处理器。 

选项页面

选项页面是一个的常见的用户界面,在chrome://extensions里可以通过单击扩展右边的选项按钮来打开。通常这个页面会和存储API结合使用,以用来在计算机上为用户保存设置。而使用脚本通过chrome.tabsAPI来打开选项页面也是可以的。 

页面重载

页面重载允许你完全替代一个以下指定页面(一个扩展程序只能重载一个页面)

  • 书签管理器
  • 通过访问chrome://bookmarks或者Chrome菜单打开的页面
  • 历史
  • 通过访问chrome://history或者Chrome菜单打开的页面
  • 新选项卡
  • 通过访问chrome://newtab或者新建选项卡出现的页面

这些被替换的页面必须在manifest.json文件中如下声明chrome_url_overrides域:

{
  "chrome_url_overrides": {
    "bookmarks": "newBookmarkManager.html"
  }
}

内容脚本

内容脚本是和你的扩展有关,在网页中运行的脚本。这个脚本可以让你访问页面里相应的DOM元素,你可以像这样在manifest.json里通过指定content_scripts域定义一个内容脚本数组:

{
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["custom-google-styles.css"],
      "js": ["custom-google-script-1.js", "custom-google-script-2.js"]
    },
    {
      "matches": ["http://*"],
      "css": ["global-styles.css"],
      "js": ["global-script.js"]
    }
  ]
}

你也可以用通过chrome.tabs API以动态的把JavaScript或者CSS注入网页。

内容脚本有以下限制:

  • 不能使用chrome.* API (chrome.extension的部分除外)
  • 不能使用由扩展脚本定义的变量或函数
  • 不能使用由网页所定义的变量或函数
  • 不能使用由其他内容脚本定义的变量或函数

内容脚本可以通过消息传递间接的使用chrome.* API,或者是和扩展脚本交互。 

一些例子

Chrome有一个非常棒的样例程序页面,你可以通过他们调用了哪些API来搜索样例扩展,你也可以阅读我第一个扩展程序MDNJump相关的文章。MDNJump已放在GitHub。

原文:http://blog.jobbole.com/46608/

Chrome扩展程序开发实践教程 扩展程序(Extensions)是浏览器增强工具,允许用户在Chrome等现代网络浏览器中添加新功能,以提升浏览体验。Chrome扩展程序通过一种称为CRX的文件格式进行封装和分发,它实质上是一个ZIP压缩文件,包含了扩展所需的所有资源。这些资源包括HTML页面、CSS样式表、JavaScript文件、图片以及其他多媒体资源。Chrome扩展程序通过manifest.json文件进行配置,该文件定义了扩展程序的元数据、权限和扩展功能的入口点。 阅读详情

相关推荐

Chrome扩展程序:提升开发效率与浏览体验

Google Chrome浏览器拥有一个广泛的扩展程序生态系统,这些程序通过增加额外的功能来提高用户体验。扩展程序可以简化日常任务,增强浏览的安全性,或是为特定工作流程提供支持。它们是小型软件应用,安装在Chrome浏览器上,用户可以通过Chrome Web Store轻松地发现和安装。尽管预定义的广告过滤规则能够覆盖大部分常见的广告,但总会有例外的情况。一些广告拦截扩展允许用户添加自定义的过滤规则,这样用户就可以根据自己的需要屏蔽特定的广告或元素。

weixin_42510201的博客 1251

【干货】Chrome插件(扩展)开发全攻略

写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处。本文所有涉及到的大部分代码均在这个demo里面:https://github.com/sxei/chrome-plugin-demo ,大家可以直接下载下来运行。 另外,本文图片较多,且图片服务器带宽有限,右下角的目录滚动监听必须等到图片全部加载完毕之后才会触发,所以请耐心等...

weixin_33762321的博客 6332

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀

本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。

weixin_30379531的博客 401

Firefox(火狐)浏览器扩展开发初探

最近开发一个FF的扩展,自动完成公司的订餐操作,主要完成的功能很简单:登陆网站,执行一个特定操作,并在ff的状态栏内显示执行的成功或者失败的状态。以前没有写过FF扩展,需要从头学习,在完成这个扩展过程中,有些收获记录下来,一方面自己记录,另一方面也方便有此需求的同学。在整个开发过

ugg的专栏 1万+

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

200SMART PLC时间不准?手把手教你用MCGS触摸屏实现自动校时(附完整代码)

本文针对西门子200SMART PLC时钟不准的常见问题,提供了一套基于MCGS触摸屏的自动校时解决方案。文章详细阐述了时钟偏差的根源、时间同步方案的技术选型,并手把手指导如何配置MCGS与PLC的通信,以及编写完整的PLC时间读取、转换与设置代码,最终实现稳定可靠的自动时间同步功能。

jupyter5notebook的博客 456

两万+字数:从0到1带你开发 Chrome 浏览器 Manifest V3 版本插件

两万两千字,从 0 开始,一篇文章搞定 Chrome 浏览器 V3 版本插件

guoqkmiss的博客 7304

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9949

Chrome扩展开发指南

前言Chrome 扩展(通常也叫插件)也是软件程序,使用 Web(HTML, CSS, and JavaScript)技术栈开发。允许用户自定义 Chrome 浏览体验。开发者可以通过增加特效或功能来优化体验。例如:效率工具、信息聚合等等。你可以在 Chrome 应用商店 查看各种各样的扩展。比如一些翻译扩展、JSON 格式化扩展等等都极大提高了我们开发或工作效率。本文旨在帮助大家了解 Chrom...

360技术 2634

GprMax正演模拟:为什么你的反射波‘消失’了?可能是直达波在捣鬼(附Python后处理脚本)

本文深入探讨了GprMax正演模拟中反射波信号被直达波淹没的现象,并提供了Python后处理脚本的实战指南。通过时域置零、自适应增益控制、频域滤波等多种技术,有效增强反射波信号,帮助用户解决探地雷达模拟中的常见问题。文章还包含详细的代码示例和效果评估方法,适合GPR数据处理的研究人员和工程师参考。

weixin_29305313的博客 232

不用公网IP!用Ollama+Chatbox搭建家庭AI助手(内网穿透方案对比)

本文详细介绍了如何利用Ollama和Chatbox在家庭局域网中搭建本地AI助手,无需公网IP即可实现内网穿透。通过对比不同穿透方案(如Tailscale、FRP等),提供最优配置建议,帮助用户低成本部署隐私安全的家庭AI系统,适用于智能家居、儿童教育等多种场景。

weixin_26765287的博客 460

Chrome扩展程序开发随记

Chrome扩展程序开发随记

KISS 2040

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

chrome插件开发_chrome扩展程序开发

Chrome扩展程序(Chrome Extensions)是可以安装在Google Chrome浏览器上的小型软件,旨在增强浏览器功能或提供其他自定义体验。通过扩展程序,用户可以根据自己的需求对浏览器进行定制,添加各种实用工具、功能,甚至改变浏览器的外观和行为。扩展程序通常是由HTML、CSS和JavaScript编写的,配合一些特定的API来访问浏览器的特性,例如:浏览器标签页、书签、网络请求等。开发者可以利用这些API创建符合个人或团队需求的功能。Chrome插件开发是一个极具创意和实践价值的过程。

silver_boy的博客 428

【WRF-Chem】预处理工具(Preprocessors)总结

预处理工具(Preprocessors)总结

WW、forever的博客 1179

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Chrome扩展程序开发文档(中文译文)

翻译自Chrome开发者网站扩展程序开发文档。英文文档链接: Chrome Developers - Extensions 第一次翻译英文开发文档,同时自己也是在边学习边翻译,因此对于译文中存在的理解偏差与翻译不到位还请谅解。文中的链接依旧是英文原文档的链接,需要到外网访问。目前仅翻译至原文 Getting Started 章节,该章节包含了一个简要的入门示例。后续章节或许会继续翻译。 欢迎 学习如何为Chrome开发扩展程序 更新于2020年11月09日(UTC+8) 如下页面包含给想要为Chrome浏览

weixin_41595086的博客 7097

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

解决Chrome【请停用以开发者模式运行的扩展程序】问题

Chrome浏览器应该是办公室人群的首选浏览器,因为Chrome不仅快而且可以按照许多的插件!但是当我们安装插件之后Chrome每次打开总是提示“请停用以开发者模式运行的扩展程序”应该很烦人吧?! 那么怎么解决这个问题呢?下面看我操作 ...

CurtainOfNight的博客 1624

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

解决Chrome提示【请停用以开发者模式运行的扩展程序】

解决Chrome提示【请停用以开发者模式运行的扩展程序】 在我们使用Chrome安装一些插件的时候(加载已解压的扩展程序),有时候会遇到提示“请停用以开发者模式运行的扩展程序”。 或者当你打包某个扩展程序之后,却因为“非chrome网上应用店程序”而无法启用,解决这个问题。 step1: 删除以”加载已解压的扩展程序“方式安装的扩展程序 step2: 开发者模式开启的条件下,点击【打包扩...

来自江南的你的博客 4万+

【插件】小白也行!一篇文章带你上手Chrome扩展程序开发

这篇文章将通过一个简单的改变网页背景颜色的扩展程序,带你了解 Chrome 扩展程序的开发流程以及核心概念。

herogus的博客 1377

尝试开发Chrome浏览器插件(Chrome扩展程序)

chrome浏览器插件开发,chrome扩展插件开发

weixin_63515766的博客 2386

Chrome扩展程序开发

学习资料 manifest.json 文件 { "manifest_version": 2, "name": "WS_Demo", "version": "0.1", "description": "chrome 扩展 demo", "icons": { // 这个 icons 里面定义的图片是用于 “扩展程序” 页,扩展程序的图标 chrome://extensions/ "16": "image3/icon48.png", "48"

wangs0622的博客 281

开发Chrome 扩展程序Hello

chrome扩展程序是基于HTML+CSS+Javascript的工程。 所以开发Web的同学开发这个浏览器扩展学习起来是非常方便的。项目结构主要包含一个manifest.json文件来存储项目信息。本文参考官方地址:https://developer.chrome.com/extensions 建立项目文件夹hello 创建manifest.json文件 json { ...

anxun3242的博客 186

Chrome 扩展程序开发

按chrome开发规范,我们首先建一个文件夹,如D:\AutoClickDemo\,在该文件夹下新建一个名为manifest.json的文本文件,并按实际情况放一个图片文件,作为插件的图标。然后新建一个名为myscript.js的js脚本文件,作为我们需要自定义执行的操作。最后,如果需要用到jQuery,还需要把jQuery放到文件夹目录中: (1)创建一个文件夹AutoClickDem

内沐的博客 3264

Chrome扩展程序开发调试简明教程

Chrome扩展程序开发调试简明教程   一、加载扩展程序 这里以加载一个已有的Chrome扩展程序为例。   把已有的扩展程序(.crx文件,点击安装扩展程序的确定按钮前可以拷贝保存)后缀改为.zip,就可以把它解压缩到某个目录,比如Beyond Feeds Flood。   参见下图,点击“载入正在开发的扩展程序”,浏览到刚才的目录,点击确定,扩展程序

The 优快云 Blog With Matol Poet ! 2095

最新Chrome可用(20190817):请停用以开发者模式运行的扩展程序

个人博客:最新 Chrome 可用:请停用以开发者模式运行的扩展程序 | YouForever 最近在远景论坛上发现了最新的解决Chrome浏览器提示:请停用以开发者模式运行的扩展程序的问题。该方法只需要添加一条注册表即可,简单快捷,亲测可用。而在网上搜索的方法基本都失效了,包括我此前写的一篇解决 Chrome"请停用以开发者模式运行的扩展程序" | YouForever。 当然涉及到注册表...

星辰大海 4800

从零开始开发 Chrome 扩展程序:修改默认新标签页

Chrome 扩展程序(Chrome Extension)是一种小型软件,可通过 JavaScript、HTML 和 CSS 扩展浏览器功能。在本教程中,我们将从零开始,开发一个 Chrome 扩展程序,用来自定义浏览器的默认“新标签页”(New Tab)。教程面向初学者,带你逐步完成开发,内容通俗易懂。

XuanRan的博客 5748
上一篇: 使用Windows API进行GDI窗口绘图
下一篇: Cuda实现Radon变换
celte
博客等级 码龄15年 40粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值