Django开发微信小程序之逆波兰计算器(三)获取用户授权和用户名

python-django实现微信小程序登录以及获取用户信息 通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。后端通过拿到前端发送的code进行对官方进行请求,获取openid和session_key。小程序可以通过微信官方提供的登录方法方便地获取微信提供的用户身份标识。code:js_code(前端发送的code)小程序密钥:secret(自己小程序)小程序id:appid(自己小程序) 阅读详情

本小程序的计算器带有历史记录功能,也就是每个用户都有自己的历史记录,因此需要存储用户信息,用于识别用户。这就少不了获取用户的Openid,因为这是用户的唯一标识符,除此之外,我们还需要获取用户名及头像信息。

整体的流程为:

  • 用户登录,前端获取到code,将code传给服务器后端
  • 服务器后端用code,AppId和AppSecret到微信指定的API中换取用户Openid,若是新用户,则新建一个用户,存储该Openid
  • 后端将该用户的Openid传给前端,同时前端获取到该用户的用户名,并将用户名和Openid传给后端,存储用户名

微信官方文档推荐的流程是在前端获取到加密数据encryptedData、初始向量iv、code,然后将他们一起传给后端,后端利用code获取到session_key,最后利用iv和session_key,解密encryptedData,从而获取到包含Openid和用户名等的所有信息。这样的好处是无需在前端和后端来回传送多次数据,但由于本小程序只需要Openid和用户名,因此不必那么麻烦解密数据。

用户登录,获取code并传给后端
app.js

App({
  globalData: {
    userInfo: null,  //存储用户信息
    openid: null     //存储openid
  },
  onLaunch: function () {
    var that = this;

    // 登录
    wx.login({
      success: res => {
          wx.request({
            url: 'https://www.******/getopenid',
            data: {
               code: res.code
            },
            success:function(result){
               if(result.data != 'none'){
                  that.globalData.openid = result.data;
               }else{
                 wx.showToast({
                   title: '登录失败',
                   icon: 'none',
                   duration: 1500,
                 })
               } 
            },
            fail:function(){
              wx.showToast({
                title: '网络错误',
                icon: 'none',
                duration: 1500
              })
            } 
          })
      },
      fail:function(){
        wx.showToast({
          title: '网络错误',
          icon: 'none',
          duration: 1500,
        })
      }
    })
  }
})

建立用户模型,用于存储用户Openid和用户名
models.py

from django.db import models

class User(models.Model):
        openid = models.CharField(max_length=20)
        nickname = models.CharField(max_length=20,default='匿名')
        def __str__(self):
                return self.nickname

获取openid并传给前端
views.py

from django.conf import settings
from django.http import HttpResponse
from .models import User,Record

import urllib.request,json

def getOpenid(request):
        code = request.GET.get('code')
        url = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code' % (settings.APPID,settings.APPSECRET,code)
        response = urllib.request.urlopen(url)
        result = json.loads(response.read().decode('utf-8'))
        openid = result.get('openid')
        if openid:
                users = User.objects.filter(openid=openid)
                if not users:
                        user = User(openid=openid)
                        user.save()
        else:
                openid = 'none'
        return HttpResponse(openid)

在欢迎页获取用户信息,并存储在globalData中。在此过程中需要用户授权,若用户之前已经授权,则直接使用wx.getUserInfo方法获取用户信息,若用户未授权,则弹出模态框,询问用户是否授权,若同意授权,则从open-type为getUserInfo的button绑定的回调函数返回的结果中获取用户信息。最后获取到用户信息之后才跳转到计算页面。
index.js

const app = getApp()

Page({
  data: {
    motto: '欢迎使用迷你计算器',
    userInfo: {},
    hasUserInfo: false,
    showModel:false
  },
  
  onLoad: function () {
  //检测用户是否已经授权
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.getUserInfo({
            success: res => {
              app.globalData.userInfo = res.userInfo  //存储用户信息
              this.setData({
                userInfo: res.userInfo,
                hasUserInfo: true
              });
            }
          })
          this.redirect();
        } else {  //未授权,则弹出模态框,询问用户授权
          this.setData({
            showModel:true
          });
        }
      }
    })
  },

  closeModel:function(e){
    this.setData({
        showModel:false
    });
  },

  getUserInfo: function(e) {  //获取用户信息
    if (e.detail.userInfo){
      app.globalData.userInfo = e.detail.userInfo;
      this.setData({
        userInfo: e.detail.userInfo,
        hasUserInfo: true
      });
      this.redirect();
    }else{
      this.setData({
        motto: '请先同意授权,才能使用本小程序',
        userInfo: {
            avatarUrl:'no.jpg'
        }
      })
    }
  },

  redirect:function(){  //跳转页面至计算页面
      var setTimeoutId = setTimeout(function(){
          wx.redirectTo({
            url: '../cal/cal',
          });
      },1500); 
  }
})

由于微信的模态框无法加入按钮,所以需要模态框需要自己写一个,并附带上open-type为getUserInfo的button。模态框用绝对定位布局即可实现,利用z-index,在模态框的底下一层加一个覆盖全屏的遮罩,并使模态框和遮罩同时显示和隐藏。
index.wxml

<view class="container">
  <view class="cover">
    <image src="{{userInfo.avatarUrl}}" class="userinfo-avatar" mode="cover"></image>
  </view>
  <text>{{userInfo.nickName}}</text>
  <view class="model" wx:if="{{showModel}}">
    <view class="modelTitle">微信授权</view>
    <view class="modelBody">微信登录需要获取你的用户信息,请前往授权</view>
    <view class="btns">
      <button open-type="getUserInfo" class="getInfo_button" bindgetuserinfo='getUserInfo' bindtap='closeModel'>去授权</button>
    </view>
  </view>
  <view class="mask" wx:if="{{showModel}}"></view>
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

效果如下:
这里写图片描述


如果觉得这篇文章帮助了您,请打赏一个小红包鼓励作者继续创作哦!!!

在这里插入图片描述

用Django实现微信小程序中的ChatGPT的流式传输 在这篇博客中,我们将介绍如何使用Django框架构建一个服务器端微信小程序,并实现ChatGPT的流式传输。ChatGPT是一个基于GPT-3.5模型的智能对话引擎,能够实现自然语言的交互和智能回复。通过将ChatGPT与微信小程序结合起来,我们可以打造一个功能强大的聊天机器人。 阅读详情

相关推荐

Python-Django毕业设计基于微信小程序订餐系统(程序+Lw)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs。项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。

加木计算机毕设程序 588

微信小程序授权登录获取用户头像和昵称时得到微信用户,记录getUserInfo转变为getUserProfile的使用修改

首先,在微信官方更新授权操作之前,我们一直使用getUserInfo来获取微信用户的头像和昵称以及openid,这个可以参考我的上一篇博客(使用getUserInfo获取用户头像),但是微信官方弃用getUserInfo之后,我们获取头像相关信息和openid的信息就需要分两步进行。 1、获取openid的部分,采用云函数来进行获取,因为微信官方修改完获取用户信息api之后,wx.getUserProfile不能够获取openid的信息,但是后面如果我们需要对个人信息就行相关操作就需要openid。 设置一

Prodigy_kyw的博客 7565

django基于Python的网上点餐微信小程序(程序+开题)

研究目的: 本研究的主要目的是开发一款基于Python的网上点餐微信小程序,通过对系统功能的完善和优化,提高用户的使用体验,满足用户多样化的需求。2)优化系统性能,提高系统的稳定性和可扩展性;研究意义: 本研究旨在开发一款基于Python的网上点餐微信小程序,通过对系统功能的完善和优化,提高用户的使用体验,满足用户多样化的需求。[7] 郭婺, 郭建, 张劲松, 石翠萍, 刘道森, 刘超. 基于Python的网络爬虫的设计与实现[J]. 信息记录材料, 2023, 24 (04): 159-162.

橙蓝毕设程序 1191

一步一步开发微信小程序(Django+Mysql)

微信小程序

perfectzxiny的博客 4206

django基于微信小程序“今天吃什么”随机推荐系统(程序+开题报告)

尤其是在快节奏的现代生活中,人们对于饮食的需求越来越多样化,而如何选择一个合适的餐厅或菜品成为了一个令人头疼的问题。本研究旨在设计并实现一款基于微信小程序的“今天吃什么”随机推荐系统,通过对用户、菜单列表、菜品类型、订单等功能的研究和开发,为用户提供一个便捷、高效的用餐决策工具。同时,通过对系统的不断优化和改进,提高用户体验,促进餐饮行业的发展。[2] 丁煜飞, 夏寅宇, 汪缪凡, 齐沛锋. 基于Python软件的故障录波数据分析[J]. 电工技术, 2023, (02): 72-73+76.

皇森斯毕设程序 1546

django基于微信小程序的技能交换学习平台(程序+开题报告)

技能交换学习平台是一种基于互联网的在线学习模式,通过用户之间的互动交流,实现知识的传播和技能的提升。同时,这种平台还可以促进用户之间的互动,形成良好的学习氛围,帮助用户更好地掌握知识和技能。[10] 虞菊花, 乔虹. 基于Python的Web页面自动登录工具设计与实现[J]. 安徽电子信息职业技术学院学报, 2023, 22 (03): 19-22+28.[1] 唐文军, 隆承志. 基于Python的聚焦网络爬虫的设计与实现[J]. 计算机与数字工程, 2023, 51 (04): 845-849.

林文程序设计 841

python django + 微信小程序 商城源码

随着互联网的快速发展,线上购物越来越普及,而商城小程序作为一种便捷的购物方式,正逐渐成为消费者的首选。为了满足市场需求,我们利用Django和微信小程序技术,设计并实现了一个智能商城小程序,旨在为用户提供更加便捷、智能的购物体验。

weixin_47190619的博客 2238

基于Python Django后端和网页爬虫的股票信息服务微信小程序开发

主要牵涉到的技术内容,包括python django后端框架, 后端服务器搭建和部署,python网页爬虫技术,微信小程序开发,等等,是一套从后端到前端的完整流程。

weixin_45512098的博客 2490

Django开发微信小程序之逆波兰计算器(一) 整体介绍

近端时间接触了微信小程序,决定编写一个迷你计算器的小程序试试水,不试不知道,一试爽到爆。总体而言,微信自带的小程序开发工具,用起来还挺方便的。网上用django开发小程序的完整文章也比较少,于是打算做个笔记。 小程序的结构 整个小程序的结构非常简单,就两个页面:index和cal,其中index页面是欢迎页面,用于获取用户授权;而cal页面就是计算器的主体页面。...

zjw_python的博客 2037

C#实战:通过ZPL指令与斑马打印机交互及状态监控全解析

本文全面解析了在C#中通过ZPL指令与斑马打印机进行交互及状态监控的实战方法。文章详细介绍了TCP/IP网络打印和Windows Raw打印两种核心连接方式,并深入讲解了ZPL指令的构建。重点阐述了通过SGD命令和斑马官方SDK实现实时打印状态监控的策略,为工业自动化场景下的可靠打印提供了完整解决方案。

weixin_29294395的博客 117

从SolidWorks到Simscape:URDF导出模型错位的5个常见原因及修复方法

本文深入分析了从SolidWorks导出URDF模型到Simscape时出现模型错位的5个常见原因,包括坐标系定义、RPY角陷阱、轴方向统一、质量属性导出和层次结构错乱,并提供了详细的修复方法和实战技巧,帮助工程师高效解决模型错位问题。

weixin_30664051的博客 442

Python-Django毕业设计基于微信小程序的网络办公系统(程序+Lw)

在员工工资管理页面,可以查看索引、工号、姓名、部门、照片、基本工资、全勤奖、其他补助、扣款金额、实发工资、登记日期、是否支付等进行详情、修改、删除、支付等操作,员工工资管理页面如下图所示。员工管理:在员工管理页面,管理员可以对索引、个工号、密码、姓名、性别、部门、职位、手机、邮箱、身份证、相片等信息进行详情、修改、添加员工工资、删除、新增等操作,如下图所示。在员工打卡页面,点击新增,通过输入工号、姓名、性别、相片、手机、考勤类型、打卡时间、打卡备注等信息,点击提交进行员工打卡,员工打卡页面如图5-7所示。

加木计算机毕设程序 354

《网络摄像机实战11:flutter_webrtc支持 AWS Kinesis Video Streams信令服务器》

本文介绍了如何在Flutter项目中集成WebRTC实现网络摄像头的实时视频和音频对讲功能。通过使用flutter_webrtc插件,开发者可以快速构建跨平台的视频通信应用。文章详细说明了集成步骤:1)安装flutter_webrtc插件;2)配置信令服务器和KVS服务;3)初始化本地/远程视频渲染器;4)建立WebRTC连接并进行设备呼叫。最后展示了实际应用效果图,证明该方案能有效实现移动端与摄像头的实时音视频交互。该方案为开发智能家居监控等应用提供了技术参考。

lvj_158的专栏 356

基于django的微信小程序搭建

因为疫情封校被迫关起来,终于有时间整理之前的课程设计。 基于django的微信小程序搭建(不定期记录踩坑日常)开发工具(一)pycharm(二)mysql(三)微信开发者平台(四)IP穿刺 开发工具 (一)pycharm (二)mysql (三)微信开发者平台 (四)IP穿刺 建议直接安装专业版,安装好之后新建工程,打开File->Setting配置开发环境: notes:新建虚拟环境、需要先安装好pip安装包以便于后期使用pip指令进行一些安装第三方库的方便操作 几个pip 常用指令整理: 安装本

m0_45225362的博客 1万+

单反相机物镜设计[DG-10]

REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。

weixin_72050316的博客 600

【数据分享】2012-2022年全国及各城市POI(兴趣点)数据(超20G)

POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点,泛指互联网电子地图中的点类数据,基本包含名称、地址、坐标、类别四个属性;随着互联网电子地图服务与LBS应用的普及,POI无论从概念范畴,还是从信息纵深都有了长足发展,互联网各个风口或火山口都和POI有一定关系,如O2O、电商、社交、互联网金融、共享经济等。

J_Giser的博客 2735

django+微信小程序

一、后台用django,前端用原生的微信小程序做完整的前后端的微信小程序。 微信小程序的前端界面: wxml代码: wxss代码: page{ height: 100%; } .container{ height: 100%; display:flex; flex-direction: column; padding: 0; box-sizing: borde...

weixin_43818672的博客 9109

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4569

微信小程序 django+uniapp网上药店自助购药系统tz89x

管理员登录系统后,可以对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能进行相应操作。系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。主要对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理的实现。商家登录系统后,可以对首页、个人中心、药品信息管理、发票信息管理、订单管理等功能进行相应操作,用户登陆系统后,可以对首页、药品信息、购物车、我的等功能进行详细操作,

QQ58850198的博客 436

【深度学习新浪潮】Nano Banana(Gemini 2.5 Flash Image)技术解析与开发者实操指南

重新定义了 AI 图像生成的产业标准。它不仅是“平民化的视觉工厂”,更是推动内容生产从“创意试错”转向“精准制造”的关键工具。未来,随着视频生成能力的加入(谷歌计划支持“文字指令 - 动态场景 - 多平台适配”全流程),Nano Banana 有望进一步颠覆影视、广告等领域的创作范式。:批量生成多场景图,模特姿态自然,服装褶皱和材质细节高度一致,节省 90% 拍摄成本。模型的非正式代号,是一款革命性的 AI 图像生成与编辑工具,主打。:生成细节丰富的厨师特写,光影自然,皮肤纹理和刀具反光逼真。

专注:太空算力、AI infra、异构调度、大模型成本工程 890

基于YOLOv8的水果新鲜程度检测系统设计与实现

数据采集与预处理模块:负责收集水果图像数据并进行标注和增强深度学习模型:基于YOLOv8的目标检测模型新鲜度评估模块:根据检测结果评估水果新鲜程度用户界面:提供友好的交互界面系统集成:将各模块整合为完整系统水果新鲜程度检测需要包含多种水果在不同新鲜度状态下的图像数据集。:包含5种常见水果(苹果、香蕉、橙子、葡萄、草莓)在不同新鲜度下的图像包含约8,000张图像,分为新鲜和腐烂两类AgriVision:大型农业图像数据集,包含水果检测和分类任务Fruit-360:包含120种水果的高质量图像。

YOLO 444

Django开发微信小程序(五)

等待更新

weixin_43419774的博客 354

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Requests库的get()方法

获取一个网页最简单的方法就是:构造一个向服务器请求资源的Request对象,返回一个Response对象即r,其包含从服务器返回的所有的相关资源 r = requests.get(url) requests.get()完整的使用方法有三个参数 requests.get(url,params=None,**kwargs) url:获取页面的url链接 params:url中的额外参数,...

cxrpty的博客 3365

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python中的反向波兰符号(RPN)计算器

本文演示了基于堆栈的RPN计算器。在本文中,我们将首先了解如何使用基本的推送和弹出操作创建堆栈类,然后我们将了解如何使用此堆栈类来评估后缀表达式。

寒冰屋的专栏 862

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

django实现小程序授权登录 附带分享邀请功能

#小程序授权登录 @csrf_exempt def grantlogin(request): code=request.POST["code"] nickname=request.POST["nickname"] avatarurl=request.POST["avatarurl"] beinvite_code=request.POST["beinvite_code"] #获取到邀请码 sessionopen=get_sessionkey_openid(code) ...

py编程|爱分享 759

CSS中的动画效果

每一帧图片连接到一块就组成了一个动画。小熊奔跑,背景及小熊。

2401_83641491的博客 773
上一篇: Django开发微信小程序之逆波兰计算器(二)计算器实现算法
下一篇: Django开发微信小程序之逆波兰计算器(四)历史记录的获取和保存
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值