Vue3 数据通信

vue3事件处理 组件 组件交互 数据传递 3.2 ◉父组件从子组件取值 数据从子组件传递到父组件 使用自定义事件 $emit。v-model.lazy 只有当用户提交或enter键后才触发,去同步数据。◉创建时:beforeCreate、created(组件创建完成不代表,已显示)一般把 定时器和性能消耗的组件 放在beforeUnmount 函数中销毁,处理掉。◉ 渲染时:beforeMount、mounted。同时父组件想要显示子组件传递过来的数据,则。2、组件的组织——嵌套的组件树。页面一启动就会自动调用该函数。 阅读详情

一、基本概念

数据在 vue 中是单向流动的,有利于管理数据状态和变化。
而在日常组件开发中,难以避免组件之间的数据通信。组件通信可以分为不同的场景,例如父子组件通信、兄弟组件通信、跨层级组件通信等。
Vue3 提供了多种方式进行组件间的通信:

  • props: 自上而下传递数据
  • emit: 自下而上报事件
  • provide/inject: 跨层级传递数据
  • v-model: 双向绑定
  • expose/ref: 暴露组件实例的方法和数据
  • pinia/vuex: 状态管理库
  • eventBus/eitt: 全局事件总线

二、props/emit

props 用于父组件向子组件传递数据,子组件通过定义 props 来接收数据。数据流动是单向的,子组件只能接收数据,不能修改。
$emit 用于子组件向父组件发送事件通知,父组件可以根据这些事件执行相应的逻辑或更新状态。

<!-- 父组件  -->
<template>
  <ChildComponent :message="parentMessage" @childClicked="handleChildClick" />
</template>

<script setup>
import ChildComponent from './childComponent.vue'
import { ref } from 'vue'

const parentMessage = ref('Hello from Parent Component!')
const handleChildClick = (val) => {
  parentMessage.value = val
}
</script>
-------------------------------------------------------------------------------------------
<!-- 子组件 -->
<template>
    <p>parentMessage: {{ props.message }}</p>
    <button @click="notifyParent">Click Me</button>
  </template>
  
<script setup>
import { defineProps, defineEmits } from 'vue'
const props = defineProps({
    message: String
})
const emit = defineEmits(['childClicked'])
const notifyParent = (val) => {
    val = 'Hello from Child Component!'
    emit('childClicked', val)
}
</script>

子组件接收的变量要与父组件冒号后的变量一致,父组件 @ 后面的事件名要与子组件 emit 的事件名一致

三、provide/inject

依赖注入解决的问题是:有多层级嵌套的组件,形成了一棵巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分数据。在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递下去,这会非常麻烦。
在这里插入图片描述
provide 和 inject 就可以帮助我们解决这一问题。 一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。
在这里插入图片描述


<!-- 祖先组件 -->
<template>
    <DescendantComponent />
</template>
  
<script setup>
import { provide } from 'vue'
import DescendantComponent from './descendantComponent.vue'

const ancestorValue = 'I provided from Ancestor Component!'
provide('sharedValue', ancestorValue)
</script>
--------------------------------------------------------------------------------------------
<!-- 后代组件 -->
<template>
    <grandchildComponent />
</template>

<script setup>
import GrandchildComponent from './grandchildComponent.vue'
</script>
--------------------------------------------------------------------------------------------
<!-- 孙组件 -->
<template>
    <p>祖先数据:{{ grandchildValue }}</p>
</template>

<script setup>
import { inject } from 'vue'

const grandchildValue = inject('sharedValue', 'default value')
</script>

inject 的第一个参数要和 provide 第一个参数一致,它第二个参数是可选的,即在没有匹配到 key 时使用的默认值。第二个参数也可以是一个工厂函数,用来返回某些创建起来比较复杂的值。在这种情况下,必须将 true 作为第三个参数传入,表明这个函数将作为工厂函数使用,而非值本身。

四、v-model

v-model 用于在父子组件之间实现双向数据绑定,Vue3 支持多个 v-model 绑定。使用 v-model 的时候,在子组件中一定要使用update:XXX开头的,绑定的变量就是父组件v-model:后的变量
应用场景: 用于在组件之间进行双向数据绑定,如表单输入组件、计数器等。

<!-- 父组件  -->
<template>
  <childComponent v-model:count="parentCount" />
  <p>Parent Count: {{ parentCount }}</p>
</template>

<script setup>
import childComponent from './childComponent.vue'
import { ref } from 'vue'

const parentCount = ref(0)
</script>
-------------------------------------------------------------------------------------------
<!-- 子组件 -->
<template>
    <button @click="increaseCount">Increase Count</button>
  </template>

<script setup>
import { defineEmits, defineProps } from 'vue'
const props = defineProps(['count'])
const emit = defineEmits(['update:count'])
const increaseCount = () => {
    emit('update:count', props.count + 1)
}
</script>

五、expose/ref

expose 和 ref 可以让子组件暴露某些方法或属性给父组件或其他组件访问,expose 用于定义子组件暴露的 API,ref 用于在父组件中引用子组件的实例并调用暴露的方法。

<!-- 父组件 -->
<template>
  <button @click="callChildMethod">Call Child Method</button>
  <ChildComponent ref="childRef" />
</template>

<script setup>
import { ref } from 'vue'
import ChildComponent from './childComponent.vue'

const childRef = ref(null)
const callChildMethod = () => {
  childRef.value?.doSomething()
}
</script>
--------------------------------------------------------------------------------------------
<!-- 子组件 -->
<template>
    <button @click="doSomething">Do Something</button>
</template>

<script setup>
import { defineExpose } from 'vue'
const doSomething = () => {
    alert('Doing something')
}
defineExpose({ doSomething })
</script>

六、vuex

vuex 是 vue 的官方状态管理库,用于集中管理应用的状态,并提供机制来更新状态,适用于大型应用中多个组件共享状态的场景。
应用场景: 适用于需要管理全局状态的应用,如用户信息、购物车内容等。

// store.js
import { createStore } from 'vuex'
const store = createStore({
  state() {
    return {
      count: 0
    }
  },
  mutations: {
    add(state) {
      state.count++
    },
    sub(state) {
        state.count--
    }
  },
  actions: {
    add({ commit }) {
      commit('add')
    },
    sub({ commit }) {
      commit('sub')
    }
  },
  getters: {
    getCount(state) {
      return state.count
    }
  }
})
export default store
--------------------------------------------------------------------------------------------
<!-- 组件 add -->
<template>
    <div>
      <p>Count: {{ count }}</p>
      <button @click="add">+1</button>
    </div>
</template>

<script setup>
import { useStore } from 'vuex'
import { computed } from 'vue'

const store = useStore()
const count = computed(() => store.getters.getCount)
const add = () => store.dispatch('add')
</script>
--------------------------------------------------------------------------------------------
<!-- 组件 sub -->
<template>
    <div>
      <p>Count: {{ count }}</p>
      <button @click="sub">-1</button>
    </div>
</template>

<script setup>
import { useStore } from 'vuex'
import { computed } from 'vue'

const store = useStore()
const count = computed(() => store.getters.getCount)
const sub = () => store.dispatch('sub')
</script>

七、pinia

pinia 是 Vue3 的官方状态管理库,作为 vuex 的替代品,提供了一个更简洁的状态管理方案,支持 TypeScript,易于使用和扩展。

// countStore.js
import { defineStore } from 'pinia'
export const useCountStore = defineStore('count', {
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++
    },
    decrement() {
      this.count--
    }
  }
})
-------------------------------------------------------------------------------------------
<!-- 组件 add -->
<template>
  <div>当前count: {{ counter.count }}</div>
  <button @click="counter.increment">+1</button>
</template>

<script setup>
import { useCountStore } from '@/stores/countStore'
const counter = useCountStore()
</script>
-------------------------------------------------------------------------------------------
<!-- 组件 sub -->
<template>
  <div>当前count: {{ counter.count }}</div>
  <button @click="counter.decrement">-1</button>
</template>

<script setup>
import { useCountStore } from '@/stores/countStore'
const counter = useCountStore()
</script>

八、eventBus

eventBus 是一种简单的事件发布/订阅模式,事件总线允许组件之间通过发布/订阅模式传递事件,但在大型应用中可能导致事件流动复杂,推荐使用其他状态管理工具。
在 Vue3 中,推荐使用 mitt 作为事件总线的实现,它提供了一个简单的 API 来处理事件总线。
应用场景: 适用于小型应用或临时的组件间通信需求。

// eventBus.js
import mitt from 'mitt'
export const emitter = mitt()
--------------------------------------------------------------------------------------------
<!-- 组件 A -->
<template>
  <button @click="sendMessage">Send Message to B</button>
</template>

<script setup>
import { emitter } from '../../eventBus'
const sendMessage = () => {
  emitter.emit('message', 'Hello from Component A!')
}
</script>
--------------------------------------------------------------------------------------------
<!-- 组件 B -->
<template>
  <p>当前message: {{ message }}</p>
</template>

<script setup>
import { ref } from 'vue'
import { emitter } from '../../eventBus'

const message = ref('默认信息')
emitter.on('message', (msg) => {
  message.value = msg
})
</script>

发布信息方用 emit,接受信息方用 on

VUE3多层组件传值(复杂场景)provide/inject 单纯使用provide和inject机制只能实现祖父组件向孙组件传递数据,而无法实现孙组件向祖父组件传递数据。如果需要实现双向通信,可以结合provide和inject与事件机制或状态管理库来完成。 阅读详情

相关推荐

一篇详细说清组件间的数据通信方式(Vue2&Vue3)

一篇详细说清组件间的数据通信方式(Vue2&Vue3)

道阻且长 810

VUE3 父子组件传参、事件传递

最近由于刚接触使用VUE3开发需求,涉及到VUE3父子组件传参、事件传递情景,在开发中做一些积累。

Cxiaomu的博客 2787

Vue3 + MQTT.js 实现 SCADA 实时数据通信:从不稳定到稳定的完整实践

本文介绍了SCADA组态引擎开发中MQTT协议的应用及优化实践。项目采用MQTT协议实现工业设备数据采集与可视化,但面临连接不稳定、数据格式多样化和数据绑定复杂三大问题。针对MQTT连接问题,分析发现超时设置过短(原8秒)、缺少客户端超时配置和心跳机制是主要原因。优化方案包括:协议转换(mqtt://→ws://)、双重超时保护(15秒手动+30秒客户端)、60秒心跳间隔等,显著提升了连接稳定性。通过完整代码实现展示了连接配置、认证处理和错误处理机制,为物联网数据传输提供了可靠解决方案。

weixin_36794508的博客 1399

【Vue3】组件通信以及各种方式的对比

【Vue3】组件通信以及各种方式的对比

owo_ovo的博客 1890

VUE3-实现祖先与后代组件的数据通信(18)

provide函数与inject函数实现祖先组件传数据给后代组件

述安的博客 1133

实现Vue3和UE5.2进行通信(Pixel Streaming)

我们在此为了简单调试,创建一个按下键盘数字键3就会发送给前端一个字符串的蓝图类,功能比较简单,很好实现,如果有不懂的地方可以看一看Unreal蓝图相关的知识,官方文档介绍的比较仔细。然后,双击打开该文件夹,在右边空白处,右键然后新建一个蓝图类,选取父类为Actor,然后将其命名为SendMessage。首先,像上面一样,在UE5.2中单击启动按钮,然后启动信令服务器并流送关卡编辑器。,功能就是在接收的消息后,在当前页面弹出一个提示框,并展示消息的内容。打开内容浏览器,在内容文件夹下新建一个文件夹,命名为。

m0_51171995的博客 1万+

Vue3 嵌入UE5.2像素流-数据通信

1.显示像素流视频2.发送数据到UE的方法,暴露到组件实例上3.接受到UE发送的数据是,会触发组件事件import {Config,import {ss: {},});// 控制UI样式},},});// 像素流播放的一些配置ss: props.ss, // 流媒体服务器地址AutoConnect: true, // 自动连接:如果为 true,应用启动时会自动连接到流媒体服务器。

qq_39593914的博客 1856

Vue3子组件向父组件传值及传递事件

回到我们这个组件,用一个简单的复用来说明这个需求的实际使用场景,当我们多次引入这个search组件之后,我们就会发现每次修改传值的业务操作,我们都要回到子组件中去操作,那如果父组件中的两个搜索框要执行不一样的业务操作,那么将会出现一个严重的冲突,只能绑定一个回调!为什么会产生这样一个需求,我们先来看看我们已经封装好的search类型的组件,在其内部有一个搜索框,当他被引入父组件之后,其组件内部的事件和值就必须要传递到父组件,才能进一步操作,和完成需求,也才能称其为真正的复用组件!子组件中绑定响应式的值。

轻编程的博客 1488

【Vue3知识】Vue3父子组件间数据通信

emit。

wendao76的专栏 1050

【Vue3笔记02】Vue3项目工程中使用axios网络请求库实现前后端数据通信

一般在实际的项目开发中,我们都是会在src目录下,创建一个api目录,然后在这个目录里面创建对应的js文件,在每一个js文件里面定义好具体的接口请求,这样在其他地方就只需要导入对应的请求方法就可以完成接口请求啦。上面只是简单的工具类代码,后续可以根据实际的需要,加上对应的逻辑判断,例如:根据状态码,判断用户是否有权限、用户是否登录、请求头加上token等等操作。前面一个步骤可有可无,根据你自己的项目情况来决定,如果你想在任意的地方都可以直接使用axios,那么就可以加上前一个步骤的配置。

✅ Java 开发工程师 795

从淬火实验到仿真验证:用ANSYS APDL复现钢球冷却温度变化(含动画生成教程)

本文详细介绍了如何利用ANSYS APDL进行淬火过程的瞬态热分析仿真,以复现钢球冷却温度变化。内容涵盖从实验数据校准材料参数、构建高保真模型、设置非线性瞬态求解,到提取节点温度曲线和生成温度云图动画的全流程。通过APDL命令流实现自动化,为工程研发和学术研究提供高效、可靠的仿真验证方法。

pz8901234的博客 791

Vue 3中的WebSocket实时数据通信与性能优化:让你的应用不再等待!

数据更新又慢了,刚点开网页,就等了十秒钟……”每当我们在使用一个需要实时更新数据的应用时,最怕的就是等待。尤其是在进行实时数据交互的情况下,我们需要一个快速、高效且稳定的解决方案,而WebSocket恰好是应对这一挑战的利器。你是不是也希望自己的Vue应用能做到秒级的数据更新,不再让用户等候?那么,在这篇文章中,我将带你深入探讨如何在Vue 3中实现WebSocket通信,同时为你提供一系列的性能优化技巧,确保应用在接收高频数据更新时依然流畅稳定。

2201_75863687的博客 1214

STM32F103多通道PWM输出避坑指南:TIM1_CH1异常输出的解决方案

本文深入解析STM32F103多通道PWM输出中的TIM1_CH1异常问题,提供从时钟配置到GPIO复用的系统化解决方案。通过黄金法则配置流程和高级调试技巧,帮助开发者快速定位并解决PWM输出不稳定、占空比异常等问题,同时拓展多定时器协同和互补PWM等高级应用场景。

weixin_29194817的博客 118

Vue3 数据通信方式全面解析

根据具体场景选择合适的通信方式,简单场景优先使用Props/Emits和Provide/Inject,复杂应用建议使用Pinia进行状态管理。Vue3 提供了多种数据通信方式,适用于不同场景的组件间通信需求。:在 Vue 组件的模板中标记一个 DOM 元素或子组件。:祖先组件向后代组件传递数据,无需逐层传递props。:直接访问组件实例(谨慎使用,破坏封装性):传递未被props接收的属性。:简化父子组件双向数据绑定。:内容分发和子向父传递数据。默认插槽、具名插槽...:直接的父子组件通信。

reed_0805的博客 561

【C++】POCO学习总结(六):线程、线程池、同步

Poco::RunnableAdapter继承自Poco::Runnable,在Poco::RunnableAdapter构造函数中指定了类和方法;Poco::ThreadLocal是线程局部变量,也叫线程局部存储,意思是模版ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。

郭老二 5100

数据集分享 | IWR1642呼吸心跳数据集

雷达开源数据库 数据集

【调皮连续波】雷达技术领域知识博主 3205

如何在浏览器页签中监听 LocalStorage 变化(vue3组合式API)?&&不同组件间的数据通信是如何实现的?

在不同浏览器页签间是相对简单的,因为浏览器提供了内置的storage事件。但在,却没有直接的方式实现。通过监听storage事件,当在其他页签修改 LocalStorage 时,你可以在当前页签捕获到这个变化。。于是出现了以下几种方法实现同一页签的LocalStorage的变化监听:1.轮询:轮询是一种最直观的方式,它定期检查 localStorage 的值是否发生变化。然而,这种方法性能较差,尤其在高频轮询时会对浏览器性能产生较大的影响,因此不适合作为长期方案。

m0_65732083的博客 1049

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

Ubuntu安装Intel WiFi系列适配器(网卡驱动)

lu_linux的博客 2602

Vue 3.0 与 iframe 深度集成:从静态页面嵌入到双向数据通信的实战解析

本文详细解析了Vue 3.0与iframe的深度集成方法,从静态页面嵌入到实现双向数据通信的全过程。通过postMessage技术实现安全跨文档通信,并结合Vue 3的Composition API封装可复用的通信逻辑,解决Vue组件与iframe内页面的数据交互难题。文章还提供了企业级解决方案架构和性能优化技巧,帮助开发者高效集成遗留系统或第三方功能。

weixin_33816946的博客 358

ZYNQ平台上基于SGMII接口的IEEE1588/PTP协议高效实现方案

本文深入探讨了在Xilinx ZYNQ平台上,利用SGMII接口实现高精度IEEE1588/PTP协议的方案。通过将硬件时间戳单元集成在PL端的AXI以太网子系统IP核中,该方案绕过了软件协议栈和外部PHY的延迟,实现了亚微秒级的时间同步精度。文章详细解析了硬件设计、Vivado IP配置、Linux驱动移植及PTP协议栈部署等关键步骤,为工业控制、通信等领域的高精度网络同步提供了高效、灵活的解决路径。

q5r6s7的博客 606

告别迷茫!新手如何从RTKLIB命令行程序入手,快速理解GNSS解算全流程

本文为GNSS新手提供RTKLIB命令行程序实战指南,重点介绍如何通过`rnx2rtkp`后处理解算工具快速掌握GNSS解算全流程。从环境搭建、程序编译到核心算法解析,帮助读者理解RTKLIB源码结构,并通过真实数据处理案例演示完整解算过程,是入门GNSS定位技术的实用教程。

weixin_42524226的博客 359

【Vue.js】Vue3父子组件数据通信案例(基础案例)

在 Vue 3 中,父组件向子组件传递数据是通过props实现的。父组件在子组件的标签上绑定数据,子组件通过定义props接收这些数据。这种方式使得数据单向流动,确保组件之间的数据传递清晰且易于管理。接下来,我们将详细探讨如何通过props实现父组件到子组件的数据传递。本博客文章内容均可以在Vue演练场中直接使用.强烈建议和我一样的初学Vue者在演练场中运行代码。在父组件中,根据传递的数据类型解析方式,来确定是否使用绑定方式示例传递的数据类型带 : 动态绑定。

SKMIT的博客 2065

lammps案例:堆垛层错能的计算

大家好,我是小马老师。 本文介绍如何使用lammps计算晶体的堆垛层错能。 正常晶体中的原子按照一定的规律排列,原子面按ABCABC……的顺序排列,如下图所示: 当某个原子面被抽出后会形成堆垛层错,如图中的蓝色原子层被抽出,原子面排列变为ABCBCA……: 可通过计算堆垛层错能形成前后的能量差计算堆垛层错能,计算公式为: E0为初始能量 Ef为删除一个原子面后的能量 A为界面面积 下面分享一个lammps计算堆垛层错能的in代码,本代码由Richard Glaze完成,本文稍作修改并进行了注释,以供初

lammps_jiayou的博客 5436

vue3中setup语法糖—几种数据通信方式

vue3-setup语法糖

qq_42708400的博客 1058

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

WINCC7.3破解文件

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

vue3.0的vuex

1. bus的使用 原理:其实bus就相当于一个vue实例,兄弟之间的数据传输是要基于vue实例(也就是创建好的bus) 创建一个bus.js文件 import Vue from 'vue' const Bus = new Vue(); export default Bus 在maini.js中导入该文件 import Bus from './lab/bus' Vue.prototy...

qq_40519017的博客 2209

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AntV X6 Vue3 组件化开发:5个关键事件处理与数据通信模式

本文详细介绍了在Vue3技术栈下使用AntV X6进行组件化开发的5个关键事件处理与数据通信模式。通过`@antv/x6-vue-shape`实现节点与画布、组件间的复杂交互,包括动态节点数据监听、子父组件通信、事件冲突处理、画布实例获取和Teleport重复渲染问题解决方案,帮助开发者构建高可维护的图编辑架构。

weixin_30292745的博客 293

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: JavaScript 运行机制
下一篇: 抛弃!important 使css优先级变大
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值