微信小程序实现websocket聊天室

微信小程序05---聊天室的搭建 微信小程序 websocket 实现聊天室功能 阅读详情

在微信小程序中建立聊天室。

目录

一、在web项目中导入javax.websocket-api-1.0-rc4.jar包

二、编写支持websocket的controller类

三、在微信小程序中编写JavaScript代码


web服务器环境:

1、 myeclipse

2、 jdk1.7

3、 tomcat8 (使用tomcat7可能出现其他问题)

4、 在WEB-INF/lib中添加javax.websocket-api-1.0-rc4.jar(使用tomcat7可能会与tomcat自带的websocket包冲突!)

前端:

1、微信小程序

一、在web项目中导入javax.websocket-api-1.0-rc4.jar包

将javax.websocket-api-1.0-rc4.jar添加到/WebRoot/WEB-INF/lib中,并build path。

二、编写支持websocket的controller类

package com.dxw.wx.controller;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
 
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
 
/*该controller用于微信聊天室*/

/**
 * @ServerEndpoint 定义当前类为websocket服务器端口,参数是访问的路径
 */
@ServerEndpoint("/websocket")
public class WX_WebSocketController {
 
	// 记录当前在线人数
	private static int onlineCount = 0;
	// CopyOnWriteArraySet是安全的set集合,用来存放客户端的每个websocket对象
	private static CopyOnWriteArraySet<WX_WebSocketController> set = new CopyOnWriteArraySet<WX_WebSocketController>();
	// 与客户端的连接会话
	private Session session;
	// 返回的信息
	private String message;
	// 当前用户的线程名字
	private String username;
 
	/**
	 * 连接建立成功调用的方法
	 * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
	 */
	@OnOpen
	public void onOpen(Session session) throws IOException {
		// 初始化session
		this.session = session;
		// 将当前session添加到set集合中
		set.add(this);				
		// 在线人数加1
		onlineCount++;
		// 修改当前线程的名字
		Thread.currentThread().setName("用户" + onlineCount);
		// 获取当前线程的名字
		username = Thread.currentThread().getName();
		// 编写返回的信息
		message = username + "登录成功,当前在线人数为:" + onlineCount + "人";
		// 群发消息
		for (WX_WebSocketController websocketTomcat : set) {
			websocketTomcat.session.getBasicRemote().sendText(message);
		}
	}
 
	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose() throws IOException {
		// 将当前session从set集合中移除
		set.remove(this);
		// 在线人数减1
		onlineCount--;
		// 编写返回的信息
		message = username + "下线成功,当前在线人数为:" + onlineCount + "人";
		// 判断set集合中是否还有websocket对象
		if (set.size() > 0) {
			// 群发消息
			for (WX_WebSocketController websocketTomcat : set) {
				websocketTomcat.session.getBasicRemote().sendText(message);
			}
		}
	}
 
	/**
	 * 连接关闭调用的方法
	 */
	@OnError
	public void onError(Throwable error) {
		error.printStackTrace();
	}
 
	/**
	 * 收到客户端消息后调用的方法
	 * @param message 客户端发送过来的消息
	 * @param session 可选的参数
	 */
	@OnMessage
	public void onMessage(String message) throws IOException {
		// 群发消息
		for (WX_WebSocketController websocketTomcat : set) {
			websocketTomcat.session.getBasicRemote().sendText(message);
		}
	}
}

三、在微信小程序中编写JavaScript代码

在此为一个工具类,接收两个参数,第一个参数:用户信息,第二个参数:回调函数(一般用于页面显示)

注意:url中为“wss://服务器域名/项目名/controller注解路径”。

注意:微信小程序只支持wss(对应https)协议,不支持ws(对应http)协议!

注意:url使用的服务器域名需要在微信公众平台中配置!!!(如下图处)

// 聊天室
//在此web服务器环境为:
        // jdk1.7
        // tomcat8 (使用tomcat7可能出现其他问题)
        // 在WEB-INF/lib中添加javax.websocket-api-1.0-rc4.jar(使用tomcat7可能会与tomcat自带的websocket包冲突!)

var url = 'wss://duxuewu.xyz:8080/SeatReservation/websocket'; //根据需要更改!!

function connect(user,func) {
  wx.connectSocket({
    url: url,
    header:{'content-type': 'application/json'},
    success: function () {
      console.log('信道连接成功~')
    },
    fail: function () {
      console.log('信道连接失败~')
    } 
  });
  wx.onSocketOpen(function (res) {
     wx.showToast({
       title: '信道已开通~',
       icon: "success", 
       duration: 2000
     })
     //接受服务器消息
     wx.onSocketMessage(func);//func回调可以拿到服务器返回的数据
  });
  wx.onSocketError(function (res) {
    wx.showToast({
      title: '信道连接失败,请检查!',
      icon: "none",
      duration: 2000
    })
  })  
}
//发送消息
function send(msg) {
  wx.sendSocketMessage({ 
    data: msg 
  });
}
module.exports = {
  connect: connect,
  send: send
}

 

在微信小程序中使用IM即时通讯实现一对一聊天已经聊天室功能 构建npm时有个异常,不过不影响正常使用,然后清除缓存并编译。腾讯云官网给出俩个方法,选择其中之一就可以,构建完成图下图。拿到SDKAPPID和SECRETKEY还有userID。因为本人没有可以使用的域名,所以开启了不校验合法域名。多创建几个用户便可以互相聊天啦。首先创建一个小程序项目。构建npm,并初始化。 阅读详情

相关推荐

Netty作为服务端通过WebSocket协议实现微信小程序聊天室的深入研究。

第一次接触微信小程序,想着手写一个基于Netty服务端消息转发的聊天室。遂,上手看了小程序的开发文档,然后又深入研究了Netty消息处理机制,原因分析,并从channel和channelHanndleContext两个角度尝试并分析了消息的发送,writeAndFlush()该方法到底怎么用,什么时候用,哪种用法最好。 服务端代码: NettyServer端: package netty;...

qq_24897081的博客 1964

微信小程序中websocket的使用----简易聊天室demo

微信小程序中websocket的使用----简易聊天室demo

weixin_69567401的博客 1180

使用Taro小程序框架开发一个学习、刷题、论坛、聊天交流的微信小程序

项目介绍 当代大学生上课缺少积极性,学习缺乏效率。同为大学生的我深有体会。所以特别开发出这样一款学习类的微信小程序帮助学生进行学习、巩固知识,同时增加对战PK模块来加强学生们的学习积极性。这是一个为学生提供在线学习课程、题库练习、考试答题、做题PK、上课签到、资料查阅、成绩分析等功能的微信小程序 希望大佬们走过路过给个star~ 技术选型 前端:Taro + 微信小程序 + Echarts 后端:...

weixin_42963591的博客 3万+

基于微信小程序实现聊天室功能

通过以上步骤,我们实现了一个简单的微信小程序聊天室功能。从前端界面的设计搭建,包括聊天记录展示、消息输入发送等组件的布局和样式设置,到后端 WebSocket 的连接建立、连接打开事件、接收消息事件的监听处理,以及发送消息函数的实现,再到页面生命周期的合理管理,各个环节相互配合,共同构建了一个完整的聊天室应用。读者可以根据此示例进一步扩展和完善功能,如添加更多的聊天表情、实现图片上传发送、优化界面交互体验等,以满足不同的业务需求。

M3527199296的博客 3363

微信小程序聊天机器人:构建互动聊天室实战

通过这个案例,我们了解了WebSocket在微信小程序中实现实时通信的基本步骤。这不仅涉及到简单的前后端代码编写,还包括了如何测试连接状态和消息传输的正确性。此外,开发者在实际开发中还需要考虑网络异常处理、安全性、心跳检测等高级特性,以确保实时通信的稳定性和用户体验。在下一章节中,我们将探讨如何在微信小程序中实现用户注册登录机制,这是聊天机器人服务中另一个不可或缺的环节。

weixin_42509507的博客 871

fm-chat-wx:开源聊天室原生小程序

BBBUG聊天室 微信小程序 | 介绍 一个可以聊天听歌的音乐聊天室,支持了Gitee/OSChina/QQ/钉钉等OAuth登录,支持多房间和创建私人房间,支持房间加密和切换房间模式,支持绑定二级域名与顶级域名,提供了第三方网站的快速接入方案。此仓库为微信小程序仓库。开发者QQ群:1140258698 体验一下: 免责声明 平台音乐和视频直播流数据来源于第三方网站,仅供学习交流使用,请勿用于商业用途。 技术架构 IM后端采用node-websocket实现Websocket服务,使用pm2持久化运行,Nginx做Wss代理,前端采用ElementUI&vue实现,后端使用PHP做数据接口API,PHP-CLI做后端数据同步,Redis做数据队列与缓存。 使用说明 clone当前项目 git clone https://gitee.com/bbbug_com/bbbug-wechat-a

微信小程序与java实现websocket长连接

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它通过在握手阶段将HTTP升级协议为WebSocket协议来实现。在握手成功后,客户端和服务器端可以互相推送消息,而不需要不断的发起HTTP请求和响应。WebSocket长连接通常用于需要实时推送数据或实时聊天的场景。Java通过Java和微信小程序的结合实现WebSocket长连接,我们可以方便地在应用中实现实时推送和在线聊天等功能,使应用更符合用户的使用习惯,也提高了用户对应用的使用体验。

油焖茄子 的博客 2555

WeChat-ChatRoom:微信小程序版聊天室

WeChat-ChatRoom 目录 介绍 微信聊天室小程序,使用框架开发,也可以编译为其他平台的小程序 使用 # 安装依赖 yarn # 构建 yarn build:prod # 启动服务器 yarn server 之后将dist/wx文件夹导入开发者工具 自定义参数 小程序项目设置:static/wx/project.config.json 监听端口:修改src/server.js中的port和src/pages/chat/index.ts中的URL 开发记录 已知问题 当消息为?、 ;等符号时不会自动换行。(无解?) 用户开启匿名选项时进入退出聊天室时仍会发送系统消息。 未来计划 匿名昵称、头像。 输入框渲染优化。 交互动画。 更多的颜色主题。(添加主题真是一个又费时间有没有成就感的事) 自己写的后端程序。 用Typescript重构逻辑层

微信小程序聊天功能 WebSocket 实现发送文字,图片,语音以及WebSocket 常见问题解决方案

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 小程序WebSocket 常见问题:(本文已解决的) 1.自动断开链接,重连但是只能存在两个WebSocket 的问题。 ---1兼容情况:1.1 正常聊天过一段时间 WebSocket 自动断开后重新链接,并且保存之前的聊天记录 ---1兼容情况:1.2 在用户黑屏但是没退出小程序过一...

a_靖的博客 3万+

javax.websocket-api-1.0.jar

javaee7 标准websocket api

微信小程序实现聊天室

主要为大家详细介绍了微信小程序实现聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

java 聊天小程序_微信小程序 聊天室简单实现

微信小程序 聊天室简单实现utils文件夹下websoctet.js文件var url = 'ws://地址端口';function connect(user, func) {wx.connectSocket({url: url,header: {"content-type":'application/x-www-form-urlencoded'}});wx.onSocketOpen(functi...

weixin_31002509的博客 1067

Metal 一、初识 Metal 及其语言规范

游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。1图形渲染;2高并发计算。苹果文档给出的 Metal 优化:CPU 低消耗、GPU 高利用、连续处理器并行、有效的资源利用Metal 官方文档。

irainsa的博客 1219

微信小程序聊天室+websocket+文件上传(发送图片)

最近哥们在写微信小程序,其中有个需求是搭建一个聊天室,可多人聊天,可私聊,可发送图片。但是由于一直没有这方面相关的了解,于是慢慢的去看,去做,前期真的很困难,路子不好走,慢慢的再搭建。 先看看效果吧 1.websocket包搭建 我是用的Springboot + gradle搭建的,这是gradle配置 plugins { id 'org.springframework.boot' vers...

ccc的博客 5982

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2960

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3917

微信小程序简单实现聊天室功能

<?php $server = new swoole_websocket_server("0.0.0.0", 9501); $server->on('open', function (swoole_websocket_server $server, $request) { file_put_contents( __DIR__ .'/log.txt' , $request->fd); }); $server->on('message', function (swo.

zhnagsan_lisi的博客 3373

LC整流滤波电路DIY:电感电容配合,手把手搭建低纹波直流电源

在直流电源设计中,整流滤波是连接交流输入与稳定输出的关键环节。常见的电容滤波虽然简单,但在大负载下纹波抑制能力有限,电感抵抗电流突变、电容抵抗电压突变,二者组合构成的LC滤波能有效降低输出电压纹波,同时减小开机浪涌电流。在工频线性电源、功放电源等对噪声敏感的场景中,LC滤波常作为稳压前的平滑缓冲。本文以一套完整DIY项目为线索,介绍整流桥后串联功率电感、并联滤波电容的电路构成,结合实际计算与波形测试,讨论电感量估算、电容选取、谐振风险、饱和电流等工程问题,并给出上电测试和故障排查方法。通过搭建与调试,可直观

weixin_29168813的博客 377

微信小程序 聊天室

//utils文件夹下websoctet.js文件 var url = 'ws://地址端口'; function connect(user, func) {   wx.connectSocket({     url: url,     header: {"content-type":'application/x-www-form-urlencoded'}   });   wx.

^璐三岁要耍蓅氓♡ 4284

SAP VC 可配置物料超级BOM简介

在有些业务中比如:汽车、笔记本、电脑、电梯等产品中,其中组成产品的型号个框架是确认的 ,但是框架内部的BOM是可变的,在客户下销售订单的时候,选取对应的组件 ,让后通过MRP的计算优生产线对这样的销售订单提供生产。这个时候我们需要选择我们需要的内存和硬盘的型号,还记得我们前面创建的特征值对应的吗,A对应的8G、B对应16G、X对应1T硬盘、Y对应2T硬盘,这里我们填写对应的值,我们这里选择16G的内存和2T的硬盘,B和Y。3、当我们选择了可配置物料的生产模式时,基本上就选择了按单生产的生产模式了。

我小时候很黑的博客 1万+

5、快速入门

点击启动实例按钮,并设计一个business key,每个实例会有一个business key, 业务主键,也相当于一个流程实例唯一key,一般会与一次业务强相关,比如一个订单号 ,此处取为shopping_1;付款程序完成后会流转到物流发货任务,此时java工程的相应订阅会收到任务,并进入断点,且读到到toWhere变量。单击shopping可以进入实时流程图的执行图,此时流程流转到第一个任务,需要业务系统完成此任务,并通知引擎。添加类,分别订阅流程中的加入购物车任务和物流发货任务。

leyoliu的博客 3501

微信小程序与WebSocket实时通信

微信小程序中的 WebSocket 实时通信功能为开发者提供了强大的实时交互能力,适用于即时通讯、实时数据更新等场景。以下是实现 WebSocket 实时通信的完整指南,包括前端和后端的实现步骤。

颖宝写论文 3315

基于 YOLOv26 的金属表面缺陷检测系统:智能视觉质检方案

摘要: 基于YOLOv26的金属表面缺陷检测系统采用深度学习技术,实现对划痕、裂纹、腐蚀等8类常见缺陷的自动化检测。系统通过数据增强预处理和YOLOv26模型的高精度识别能力,具备多类别分类、实时推理和强鲁棒性特点,适用于不同金属材质与光照条件。架构包含数据采集、预处理、YOLOv26检测和后处理模块,代码实现采用PyTorch框架,支持训练数据增强与标准化处理,为工业质检提供高效智能解决方案。

一键难忘的博客 589

微信小程序php聊天室,微信小程序 聊天室简单实现

微信小程序 聊天室简单实现utils文件夹下websoctet.js文件function connect(user,func) {wx.connectSocket({url: url,header: {"content-type":'application/x-www-form-urlencoded'}});wx.onSocketOpen(function (res) {send('{"type"...

weixin_39830175的博客 284

读懂 403 Forbidden, the request has been blocked by UCON.:它不是浏览器渲染问题,而是后端安全闸门在拦截

摘要 403 Forbidden 错误表明服务器理解请求但拒绝执行,通常与权限或访问控制有关。当错误信息显示 "blocked by UCON" 时,说明请求被 SAP 体系中的统一连接管控框架拦截。UCON 采用白名单机制限制外部调用,通过记录、评估、强制三阶段流程实施管控。常见触发场景包括 HTTP 服务与通信场景配置不一致、白名单未更新等。排查时应通过 DevTools 确认服务器响应,使用 curl 排除浏览器干扰,并比较不同环境的行为差异。解决方案通常涉及调整配置传输顺序或更新

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

NTscan扫描工具

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

WebSocket的使用nodejs/微信小程序

WebSocket的使用

weixin_43321726的博客 1091

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

上一篇: 微信小程序开发(以知晓云SDK作为后端)
下一篇: windows下使用tensorflow1.12时bug解决
ACanswer
博客等级 码龄12年 280粉丝 42原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值