React 实现 2D 画板功能

react中使用react-konva实现画板框选内容 本文用到的是基于react封装的图形绘制。Konva是一个框架,它通过对2d context的扩展实现了在桌面端和移动端的可交互性。Konva提供了高性能的动画,补间,节点嵌套,布局,滤镜,缓存,事件绑定(桌面/移动端)等等功能。你可以使用Konva在舞台上绘制图形,给图形添加事件,移动、缩放和旋转图形并且支持高性能的动画即使包含数千个图形。本人每篇文章都是一字一句码出来,希望大佬们多提提意见。创作不易,给我打打气,加加油☕use-image。 阅读详情

在移动端或者PC端我们来模拟画板的实现, 支持清除和导出功能,此处简单实现,仅作开发参考。

效果演示

主要代码演示

/* 此模块用于实现签名绘图功能 */

// 需要用到的变量定义
let clickX = new Array();
let clickY = new Array();
let clickDrag = new Array();
let paint;
let point = {notFirst:false};

let canvasDiv =  null; // 初始化画布父盒子
let canvas = document.createElement('canvas'); // 创建画板
let context = canvas.getContext("2d"); // 创建2d画布
let canvasWidth = 0; // 初始化画布宽度
let canvasHeight = 0; // 初始化画布高度

// 可导出图片的标识
let _exportable = false;

/* ------------ 需要用到的一些功能函数  ------------ */
function addClick(x, y, dragging) {
  clickX.push(x);
  clickY.push(y);
  clickDrag.push(dragging);
}

function draw(){
  _exportable = true;
  while (clickX.length > 0 ) {
    point.bx = point.x;
    point.by = point.y;
    point.x = clickX.pop();
    point.y = clickY.pop();
    point.drag = clickDrag.pop();
    context.beginPath();
    if (point.drag && point.notFirst) {
      context.moveTo(point.bx, point.by);
    } else {
      point.notFirst = true;
      context.moveTo(point.x - 1, point.y);
    }
     context.lineTo(point.x, point.y);
     context.closePath();
     context.stroke();
  }
}

/* 创建画布背景和画笔 */
function create() {
  // 以下是创建画布背景
  context.rect(0, 0, canvasWidth, canvasHeight); 
  context.fillStyle="#f2f2f2"; // 图片北京色是灰色,此处去除会变黑色
  context.fill();
  // 设置画笔属性
  context.strokeStyle = "#666";
  context.lineJoin = "round";
  context.lineWidth = 2;
  // 默认值清理
  clickX = new Array();
  clickY = new Array();
  clickDrag = new Array();
  _exportable = false;
}

export default {
  /* 初始化 */
  init(canvasDivDom, classname) {
    canvasDiv = canvasDivDom; // 传入画布父盒子
    canvasWidth = canvasDiv.clientWidth; // 获取父盒子宽度
    canvasHeight = canvasDiv.clientHeight; // 获取父盒子高度
    // 设置属性并追加元素
    canvas.setAttribute('width', canvasWidth);
    canvas.setAttribute('height', canvasHeight);
    canvasDiv.appendChild(canvas);
    // 创建画布背景和画笔
    create();
    // 开始监控画图
    this.listen(classname); 
  },

  /* 画图时的监控 */
  listen(classname) {
    // 获取盒子需要的参数
    let left = canvas.getBoundingClientRect().left;
    let top = canvas.getBoundingClientRect().top;
    // 支持 移动端
    canvasDiv.addEventListener("touchstart", function(e){
      paint = true;
      classname && (this.className = classname);
      (e.touches) && (e = e.touches[0]);
      addClick(e.pageX - left, e.pageY - top);
      draw();
    });
    
    canvasDiv.addEventListener("touchmove", function(e){
      if(!paint) {
        return;
      }
      (e.touches) && (e = e.touches[0]);
      addClick(e.pageX - left, e.pageY - top, true);
      draw();
    });

    canvasDiv.addEventListener("touchend", function(e){
      paint = false;
    });
    
    // 支持 PC 端
    canvasDiv.addEventListener("mousedown", function(e){
      paint = true;
      classname && (this.className = classname);
      addClick(e.pageX - left, e.pageY - top);
      draw();
    });
    
    canvasDiv.addEventListener("mousemove", function(e){
      if(!paint) {
        return;
      }
      addClick(e.pageX - left, e.pageY - top, true);
      draw();
    });
    
    canvasDiv.addEventListener("mouseup", function(e){
      paint = false;
    });
    
    canvasDiv.addEventListener("mouseleave", function(e){
      paint = false;
    });
  },

  /* 清理 */
  clear() {
    // 使用此方式来清理画布
    canvas.width = canvas.width; 
    canvas.height = canvas.height;
    create(); // 重新创建画布背景和画笔
    _exportable = false; // 清理之后无法导出
  },

  /* 导出图片 */
  exportImg() {
    if(!_exportable) {
      return -1;  // 说明此处无法导出图片
    }
    return canvas.toDataURL("image/png");
  }
}

支持平台

  • 移动端
  • PC端

Github地址

React 19 + Canvas API 实战:手把手教你从零搭建一个高DPI适配的在线画板 本文详细介绍了如何使用React 19和Canvas API构建一个高DPI适配的在线画板应用。通过处理设备像素比(devicePixelRatio)和优化React状态管理,解决高分屏模糊问题并提升性能。文章还涵盖了坐标计算、事件处理、UI优化及性能监控等核心技巧,帮助开发者快速实现功能丰富的绘图应用。 阅读详情

相关推荐

React 19 + Canvas 实战:手把手教你从零搭建一个高DPI适配的在线画板(附完整代码)

本文详细介绍了如何使用React 19和Canvas API构建一个高DPI适配的在线画板。通过实战教程,开发者将学习到设备像素比(devicePixelRatio)的智能适配、React状态管理在实时绘图场景下的性能优化等核心技术。文章还提供了完整的代码示例,帮助开发者快速实现一个功能丰富的绘图应用。

weixin_27890975的博客 247

React Native Canvas 使用教程

`react-native-canvas` 是一个专门为 React Native 打造的 Canvas 组件,它赋予你在原生环境中使用 HTML5 Canvas 的能力。借助这个库,你可以在 React Native 应用中实现复杂的 2D 图形绘制、动画效果、甚至图像处理等高级功能。 ## 项目快速启动 ### 安装 首先,你需要在你的 React Native 项目中安装 `react...

gitblog_00500的博客 1004

开源协作画板openpad:自托管部署与实时同步技术解析

在线协作白板与数字画板工具已成为现代团队协作、创意设计和远程教学的核心基础设施。其技术原理通常基于Web技术栈,通过前端Canvas API实现高性能图形渲染,并借助WebSocket建立实时通信通道。在多人协同场景下,关键技术价值在于解决状态一致性问题,这通常通过Operational Transformation(OT)或Conflict-Free Replicated Data Type(CRDT)算法实现,确保操作在乱序或网络延迟下最终收敛。这类技术广泛应用于远程办公、在线教育、敏捷开发看板等场景。

weixin_30470643的博客 429

【亲测免费】 探索创新:react-native-canvas - 带着你的React Native应用飞入图形绘制的新世界!

在如今的移动应用开发中,React Native以其强大的跨平台性能和丰富的组件库,已经成为开发者们的首选框架之一。然而,当涉及到动态图形渲染和交互式设计时,原生的React Native可能就显得有些力不从心了。但不用担心,这就是`react-native-canvas`项目登场的时候。 ## 项目介绍 `react-native-canvas`是一个专门为React Native打造的Ca...

gitblog_00068的博客 1169

React Native中使用Canvas绘制图形

综上所述,通过使用react-native-canvas库,我们可以在React Native中使用Canvas来绘制图形。首先需要安装和配置react-native-canvas库,然后在组件中引入Canvas组件并获取到Canvas的上下文对象,最后使用Canvas的API进行绘制操作。在React Native中,我们可以使用react-native-canvas库来使用Canvas。除了矩形和圆形,Canvas还提供了其他绘制图形的方法,例如绘制直线、绘制路径、绘制文本等。方法开始绘制路径,使用。

XymkMl的博客 1301

React Native游戏开发:使用PixiJS构建2D游戏

随着移动游戏市场的“轻量化”趋势(如微信小游戏、抖音小游戏),开发者需要一种既能快速开发又能跨iOS/Android运行的解决方案。传统游戏引擎(如Unity)虽强大但学习成本高,而React Native作为成熟的跨平台框架,结合轻量级2D渲染引擎PixiJS,正好能满足“快速迭代+跨平台”的需求。本文将聚焦这一组合的核心实现逻辑,覆盖从环境搭建到完整游戏案例的全流程。本文将按“概念解析→原理串联→实战落地”的逻辑展开:首先用生活案例解释React Native与PixiJS的分工;

移动开发前沿的博客 1500

使用 React 和 Konva 实现一个在线画板组件

使用 React 和 Konva 实现一个在线画板组件

idree的博客 2198

react-native-canvas-view:一个React Native组件,暴露了一个原生(可控)画布层

React原生画布视图 React Native组件,用于实现可绘制的画布。 允许显式的行为(使用paths和active={false} )或允许视图自行处理用户输入。 道具 active:boolean启用/禁用视图的绘图功能(禁用以controlled使用) strokeColor:number将画布笔触设置为给定的本机兼容颜色 strokeWidth:number设置宽度 paths:[Path] -明确设置画布上绘制的路径(允许使用controlled画布) ViewSnapshot模块 实际的react组件(请参阅目录)在拍摄画布照片时会花费很多精力。 ViewSnapshot.

打造一个现代化的 Web 涂鸦画板

本文介绍了如何从零开始构建一个现代化的Web涂鸦画板应用。主要内容包括: 技术选型:推荐使用React+Canvas2D的组合,支持跨平台设备并平衡性能与开发效率。 核心实现: 基础绘图功能:通过分层Canvas技术实现铅笔/橡皮擦工具 事件处理:统一处理鼠标、触摸和数位板的PointerEvent 状态管理:包括颜色选择、笔刷大小调整等 高级功能: 撤销/重做:基于图像快照的历史记录管理 画布变换:实现缩放和平移功能 图层系统:支持多图层独立编辑 特殊笔刷:喷枪、毛笔等效果实现 形状工具:直线、矩形等几何

油墨香^-^的博客 323

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧

本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。

weixin_29290947的博客 494

2 海康视觉平台VisionMaster 上手系列:大纲及准备

海康视觉平台VisionMaster 大纲,课前准备 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 1万+

在移动端用canvas技术实现一个画板的工程实例

最新更新时间:2020年03月11日22:07:14 《猛戳-查看我的博客地图-总有你意想不到的惊喜》 本文内容:在研发C端教育类产品的时候,会遇到在作答题目的时候需要验算或者做草稿,因此诞生了一个草稿本或者小黑板的功能模块,本文统称为画板。本文基于canvas技术,深入讨论实现一个画板功能的原理和核心代码。 成品示例图 画板的功能包括两部分:控制面板区和绘画区,控制面板区如下图上半部分,集...

万少博-FE 516

在Cursor IDE中集成Datadog监控:自然语言查询实战指南

在云原生和微服务架构中,可观测性(Observability)已成为保障系统稳定性的核心技术支柱。其核心原理是通过日志(Logs)、指标(Metrics)和追踪(Traces)三大支柱,实时采集并呈现系统的运行状态。这项技术的价值在于,它让开发者能够透视复杂的分布式系统,快速定位性能瓶颈与故障根因。在实际的工程实践中,开发人员常常需要在编码环境与监控平台之间频繁切换,这种上下文切换严重影响了排障效率。本文聚焦于如何利用Model Context Protocol(MCP),将强大的Datadog可观测性平台

weixin_42519772的博客 348

Tauri Tutorial 画板功能实现:从零手写 Canvas 画笔、橡皮擦与透明度控制

想为你的 Tauri 桌面应用加一个随手涂鸦的 **Tauri 画板** 吗?本教程带你从零实现基于 **Canvas 画笔** 的完整画板功能,涵盖**橡皮擦**、**透明度控制**、笔刷大小、颜色选择与图片保存读取。整个功能不依赖任何重型绘图库,核心只是一个不到 110 行的 Brush 类,非常适合新手理解 Canvas 2D 的绘图原理。 ## 画板功能整体架构 画板位于项目 `src

gitblog_00616的博客 634

Vivado 18.3安装全攻略:从下载到配置的完整指南

本文详细介绍了Vivado 18.3的安装全流程,从下载准备到配置优化,特别适合FPGA开发者。文章包含硬件要求、版本选择、组件配置等实用技巧,帮助用户避免常见安装问题,确保稳定运行。重点解析了License配置和系统优化设置,提升开发效率。

weixin_28331555的博客 568

Windows11安装Ubuntu 20.04.3 LTS双系统(详细过程)

一、基础环境 听说BIOS模式的传统MBR模式和新式UEFI模式,会对安装双系统产生影响。Windows11应该都是UEFI吧,可以按win+r输入msinfo32回车确认查看BIOS模式,我的电脑是UEFI+双硬盘 Ubuntu安装准备 1、 官网下载Ubuntu 20.04.3 LTS镜像iso文件:https://ubuntu.com/download/desktop 2、 下载官网推荐的U盘启动制作工具rufus: https://rufus.ie/ 3、制作启动u盘 插入U盘, 运行 rufu

学习随笔 9万+

js+canvas实现画板功能

1,实现了画图,改变画笔粗细,改变画笔颜色,清屏功能 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>画板</title> <link rel="shortcut icon" type="image/x-icon" href="img/an.ico"/> <link rel="stylesheet" type="text/cs

清砾的博客 960

通过CN3口直接控制台达伺服电机A2-M(二)

既然可以通过RS485与伺服驱动器进行通讯,那么就肯定可以控制转速 首先,需要了解下 ‘控制模式及控制命令输入源设定’ 依据以上资料,速度控制模式有两种,S和SZ模式,分别对应模式选择中的02和04,对P1-01的地址0102进行写地址操作即可实现,一开始我使用了S模式,但是这个模式在寸动模式下会自动运转,不符合我控制的要求,后面改用SZ模式,就可以实现零速度。 使用串口工具发送命令:“01 06 01 02 00 04 28 35”即可以实现设置,设置完成后可以手动在伺服驱动器的按键面板上进行确

HKing_evil的博客 6826

50天50个小项目 (React19 + Tailwindcss V4) ✨ | DrawingApp(画板组件)

基于React19 + Tailwindcss V4的在线画板应用,主要功能包括:使用鼠标绘制图形、调整画笔粗细和颜色、一键清空画布。项目采用React19 + Tailwindcss V4实现,核心功能通过Canvas API完成绘图操作。

WOMENshiNIDE的博客 685

多模态大模型:技术原理与实战 全球多模态大模型介绍

关键词:多模态大模型、深度学习、计算机视觉、自然语言处理、跨模态学习、迁移学习、人工智能随着人工智能技术的飞速发展,多模态大模型已经成为了当前AI领域最热门的研究方向之一。多模态大模型能够同时处理和理解多种类型的数据,如文本、图像、音频和视频等,这为AI系统在复杂场景下的应用提供了更加强大和灵活的能力。本文将深入探讨多模态大模型的技术原理,介绍其实战应用,并对全球主要的多模态大模型进行全面的介绍和比较。

AI天才研究院 4270

数仓建模:维度表合并时,如何处理可能出现的数据冲突?

通过以上方法,可以有效地处理维度表合并时可能出现的数据冲突,确保合并后的数据完整性、一致性和准确性,满足业务需求和数据仓库的性能要求。在合并过程中,需要根据实际情况选择合适的处理方法,并进行充分的测试和验证。(2)实战中总结的SQL技巧,帮助SQLBOY在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。技巧总结,让你认识不一样的数仓。,数据库会抛出异常,可根据异常处理机制解决。

石榴姐yyds 1133

Remotion 地图渲染稳定性:用“固定地图画板“消除 MapTiler / Mapbox 平移缩放闪烁

本文是 Remotion 地图类技能库([remotion-maps](https://link.gitcode.com/i/ea4f2b6bca70db7474d5c3165c801491))中 MapTiler / Mapbox 2D 地图制作必须掌握的渲染稳定性参考。核心场景是:你在 Remotion 合成中让一张带卫星影像、矢量山体阴影或高保真底图的地图做平移与缩放,却发现渲染出的画面中底

gitblog_00958的博客 402

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用canvas建立一个可以使用彩笔、橡皮檫的画板

使用canvas建立一个可以使用彩笔、橡皮檫的画板 我参加了一个web学习班,因为了解到写博客可以有效提高我的知识掌握水平,所以决定从我学习的内容来入手,废话不多说,开始今天的学习。 首先我们要在<body>中创建我们需要的标签,代码如下。 其中<input type="color">是颜色选择器,<select><option>画笔</option></select>是下拉选择标签,<canvas></canvas&

爱学但菜的大白鹅 446

visio安装包

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

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

canvas实现redo和undo、擦除功能

canvas实现redo和undo、擦除功能 首先,在html文件中引入canvas,除此之外,我还引入了jQuery <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</

weixin_45781661的博客 1085

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

react-konva实战指南:Canvas高性能+易维护的组件化图形开发实现教程

本文介绍了React-Konva这一结合Konva.js图形库与React声明式编程的解决方案。文章从核心优势切入,包括声明式API、React生态兼容性、高性能渲染和完善事件系统......

鹏多多的博客 1251
上一篇: React 实现 iphone 上的小圆点的拖拽功能
下一篇: 在react中 实现 base64的图片转换成formdata格式并实现上传功能
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值