react-native学习一: react-navigation

React Native 导航系统实战(React Navigation) 本文介绍了 React Native 应用中 React Navigation 7.x 的使用方法,重点讲解了堆栈导航、标签导航和抽屉导航的实现。内容包括安装配置、参数传递、样式定制和动画控制,通过代码示例展示了如何构建完整的导航系统。React Navigation 提供了跨平台支持、原生体验和高度定制性,是 React Native 应用开发的首选导航方案。读者将学习到从基础配置到高级功能的完整导航实现流程,并能立即应用于实际项目开发。 阅读详情

react-navigation: 是一款RN中的导航组件, 是Navigator的加强版,支持底部导航类似IOS中的UITabBarController,此外也支持侧拉效果方式的导航类似于Android中的DrawerLayout抽屉效果

什么是导航器:

可以看做是一个普通的React组件,可以通过导航器来定义你的App导航结构,导航器还可以渲染通用元素,例如可以标题栏,底部的tab栏和顶部的选项卡栏

在react-navigation中有如下的7种类型的导航器

1 createStackNavigator: 类似于普通的Navigator,屏幕上方导航栏

2 createTabNavigator:已经弃用,使用createBottomTabNavigator和/或createMaterialTopTabNavigator替代

3 createBottomTabNavigator:相当于IOS中的TabBarController,屏幕下方的导航栏

4 createMateriaTopTabNavigator:屏幕顶部的材料设计主体标题栏

5 createDrawerNavigator:抽屉效果,侧边滑出

6 createSwitchNavigator: SwitchNavigator的用途是一次只显示一个页面

在学习七种导航器之前,学习两个和导航关于概念:

Screen navigation prop(屏幕导航属性) : 通过navigation可以完成屏幕之间的调度操作

Screen navigationOptions(屏幕导航选项) : 通过navigationOptions可以定制导航器显示屏幕的方式(例如:头部标题,选项卡标签等)

 

重点: Screen navigation prop

当导航器中的屏幕被打开时,它会收到一个navigation prop, navigation prop是整个导航环节的关键一员,接下来就详解一下navigation的作用:

1 navigate:跳转到其他页面

2 state:屏幕当前的state

3 setParans:改变路由的params

4 goBack: 关闭当前屏幕

5 dispatch:向路由发送一个action

6 addListener:订阅导航生命周期的更新

7 isFocused:true 标志屏幕获取到了焦点

8 getParan:获取具有回退的特定参数

9 dangerouslyGetParant:返回父导航器

 

使用navigate进行界面之前的跳转

navigation.navigate({rootName,params,aciton,key}) 或navigation.navigate(rootName,params,action)

其中: rootName: 要跳转界面的路由名,也就是在导航器中配置的路有名

         params:要传递给下一个界面的参数

        action: 如果该界面是一个navigator的话,将运行这个sub-action;  key:要导航到的路由可选标志符.如果已存在,将后退到此路由

 

createStackNavigator

createStackNavigator提供App屏幕之间的切换能力,以栈的形式管理屏幕之间的切换,新切换到的屏幕会放在栈的顶部

屏幕转场风格: 默认情况下createStackNavigator提供了转场过度效果,在Android上从屏幕底部淡入,在IOS上是从屏幕的右侧划入,当然也可以配置

createStackNavigator  API:

createStackNavigator(RouterConfigs ,StackNavigatorConfig) : RouteConfigs(必选) : 路由配置对象是从路由名称到路由配置的映射,告诉导航器该理由呈现什么. 实例Demo详见 github, StackNavigatorConfig(可选),配置导航器的路由

1 yarn add react-navigation

2 yarn add react-native-gesture-handler 

3 react-native link react-native-gesture-handler 


createTopNavigator

createTopNavigator(RouterConfigs ,TopNavigatorConfig) : 其参数同createStackNavigator

createTopNavigator和createBottomNavigator 不同于createStackNavigator的是 TabNavigatorConfig:

其TabNavigatorConfig:

tabBarComponent: 指定TabNavigator的TabBar组件

tabBarposition:用于指定TabBar的显示位置, 支持'top'和'bottom'两种方式

swipeEnabled: 是否可以左右滑动切换tab

lazy:默认值是false 如果是true. Tab页只会在被选中或滑动到该页时被渲染.当为false时,所有的Tab页将直接被渲染(可以轻松实现多Tab页面的懒加载)

optimizationsEnabled: 是否将Tab页嵌套.如果是,一旦该Tab页失去焦点,将被移除当前页面,从而提高内存使用率

animataionEnabled: 切换页面时是否有动画效果

initialLayout:包含初始高度和宽度的可选对象可以被传递以防止react-native-tab-view呈现中的一个帧延迟

tabBarOptions:配置TabBar 下文会详细讲解

initialRouteName:默认页面组件,TabNavigator显示的第一个页面

order:定义tab顺序的routeNames数组

paths:提供routeName到path config的映射,它覆盖routeConfigs中设置的路径

backBehavior:后退按钮是否会导致初始tab?如果是,则设切换到初始tab,否则什么也不做,默认为切换到初始tab

其中tabBarOptions(上文中提到的下文会详细讲解的属性)

activeTintColor:设置TabBar选中状态下的标签和图标的颜色

inactiveTintColor:设置TabBar非选中状态想家的标签和图标的颜色

showIcon: 是否展示图标,.默认是false

showLabel:是否展示标签,默认是true

upperCaseLabel:是否使标签大写,默认是true

tabStyle:设置单个tab的样式

indicatorStyle:设置indicator(tab下面的那条线)的样式, 就是TopNavigator滑动的那条线的样式

labelStyle:设置TabBar标签的样式

iconStyle:设置图标的样式

style:设置整个TabBar样式

allowFontScaling:设置TabBar标签是否支持缩放,默认支持

scrollEnable:是否支持选项卡滑动,默认为false

demo请移步到github

 

createDrawerNavigator 

其两个参数同上面的三个navigator一致

不同点:

DrawerNavigatorConfig:

drawerWidth: 设置侧边菜单的宽度

drawerPosition: 设置侧边菜单的位置, 支持left right 默认是left

contentComponent:用于呈现抽屉导航器内容的组件, 例如导航项. 接受抽屉导航器的navigation属性,默认为DrawerItems. 有关详细,请参照下文

contentOptions:配置抽屉导航器内容,见下文

useNativeAnimations:是否启用Native动画,默认启用

drawerBackgroundColor:侧边菜单的背景

initialRouteName:初始化哪个界面为根界面,如果不配置,默认使用RouteConfigs中的第一个页面当做根界面

order:drawer排序,默认使用配置路由的顺序

paths:提供routeName到path config映射,它覆盖routeConfigs中设置的路径

backBehavior:后退按钮是否会导致标签切换到初始drawer? 如果是,则切换到初始drawer,否则什么也不做,默认为切换到初始drawer

 

自定义侧边栏(contentComponent)

DrawerNavigator有个默认带滚动的侧边栏,你也可以通过重写这个侧边栏组件来自定义侧边栏

DrawerItems 的contetOptions

contentOptions主要配置侧滑栏item的属性,只对DrawerItems,例如我们刚才写的例子,就可以通过这个属性来配置颜色,背景色等,其主要属性有  items ,activityItemKey, activieTintColor,activieBackgroundColor, inactiveTintColor,inactiveBacgroundColor,onItemPress,itemsContainerStyle,itemStyle,labelStyle,iconContainerStyle,activelabelStyle,inactiveLabelStyle,iconContainerStyle

 

createSwitchNavigator

createSwitchNavigator的用途是一次只显示一个页面,默认情况下,它不处理返回操作,并在你切换时将路由重置为默认状态

cerateSwitchNavigator API
createSwitchNavigator(RouteConfigs,SwitchNavigatorConfig): RouteConfigs(必选)同createStackNavigator的RouteConfigs,路由配置对象是从路由名称到路由配置的映射,告诉该路由器呈现什么; SwitchNavigatorConfig(可选), 配置导航器的路由

SwitchNavigatorConfig: 

initialRouteName : 第一次加载时初始选项卡路由的routeName

resetOnBlur: 切换离开屏幕时,重置所有嵌套导航器的状态, 默认为true

paths: 提供routeName到path配置的映射, 它重写routeConfigs中设置的路径

backBehavior: 控制'返回'按钮是否会导致Tab页切换到初始Tab页? 如果是, 设置为initialRoute 否则none  默认为none行为

实例代码请见github

其中抽取公共的AppNavigator代码为:

//导航器

import React, {Component} from 'react';
import {Platform,Button,ScrollView,SafeAreaView,View} from 'react-native';
import {createStackNavigator,createMaterialTopTabNavigator,createBottomTabNavigator,createDrawerNavigator,DrawerItems,createSwitchNavigator} from 'react-navigation'
import Ionicons from 'react-native-vector-icons/Ionicons'
import MaterialIcons from 'react-native-vector-icons/MaterialIcons'
//引入组件页面
import HomePage from '../pages/HomePage'
import Page1 from '../pages/Page1'
import Page2 from '../pages/Page2'
import Page3 from '../pages/Page3'
import Page4 from '../pages/Page4'
import Page5 from '../pages/Page5'
import Login from '../pages/Login'

//1 创建两个导航器,用于演示createSwitchNavigator
const AppStack = createStackNavigator({
    Home: {
        screen:HomePage
    },
    Page1: {
        screen:Page1
    }
})
const AuthStack = createStackNavigator({
    Login: {
        screen:Login
    }
})
//2 将用于演示createSwitchNavigator导航器导出
export const AppSwitchNavigator =  createSwitchNavigator({
    Auth:AuthStack,
    App:AppStack
}, {
    initialRouteName:'Auth'
})



//创建Top导航器
const TopNavigator = createMaterialTopTabNavigator({
    Page1: {
        screen:Page1,
        navigationOptions: {
            tabBarLabel:'Android'
        }
    },
    Page2: {
        screen:Page2,
        navigationOptions: {
            tabBarLabel:'ios'
        }
    },
    Page3: {
        screen:Page3,
        navigationOptions: {
            tabBarLabel:'React'
        }
    },
    Page4: {
        screen:Page4,
        navigationOptions: {
            tabBarLabel:'React Navive'
        }
    },
    Page5:{
        screen:Page5,
        navigationOptions: {
            tabBarLabel:'My Pleasure'
        }
    }
},{
    tabBarOptions: {
        tabStyle: {mindWidth:50},
        upperCaseLabel:false,   //是否使标签大写,默认为true
        scrollEnabled:true,  //是否支持选项卡滑动,默认为fasle
        style: {            //设置整个TabBar样式
            backgroundColor:'#678'
        },
        indicatorStyle: {   //设置指示器样式(下面那条横线)
            height:2,
            backgroundColor:'pink'
        },
        labelStyle: {   //文字样式
            fontSize:13,
            marginTop:6,
            marginBottom:6
        }
    }
})

//创建底部导航
const BottomNavigator = createBottomTabNavigator({
    //底部的和头部的基本设置一样
    Page1: {
        screen:Page1,
        navigationOptions: {
            tabBarLabel:'最热',
            tabBarIcon:({tintColor,focused}) => {
                return <Ionicons
                    name={'ios-home'}
                    size={26}
                    style={{color:tintColor}}
                />
            }
        }
    },
    Page2: {
        screen:Page2,
        navigationOptions: {
            tabBarLabel:'趋势',
            tabBarIcon: ({tintColor,focused}) => (
                <Ionicons
                    name={'ios-people'}
                    size={26}
                    style={{color: tintColor}}
                />
            )
        }
    },
    Page3: {
        screen:Page3,
        navigationOptions: {
            tabBarLabel:'收藏',
            tabBarIcon: ({tintColor,focused}) => (
                <Ionicons
                    name={'ios-chatboxes'}
                    size={26}
                    style={{color: tintColor}}
                />
            )
        }
    },
    Page4: {
        screen:Page4,
        navigationOptions: {
            tabBarLabel:'我的',
            tabBarIcon: ({tintColor,focused}) => (
                <Ionicons
                    name={'ios-aperture'}
                    size={26}
                    style={{color: tintColor}}
                />
            )
        }
    }
},{
    tabBarOptions: {
        activeTintColor:'red'
    }
})


//创建抽屉导航
const DrawerNavigator = createDrawerNavigator({
    Page4: {
        screen:Page4,
        navigationOptions: {
            drawerLabel:'Page4',
            drawerIcon: ({tintColor}) => {
                return <MaterialIcons
                    name={'drafts'}
                    size={24}
                    style={{color:tintColor}}
                />
            }
        }
    },
    Page5: {
        screen:Page5,
        navigationOptions: {
            drawerLabel:'Page5',
            drawerIcon: ({tintColor}) => {
                return <MaterialIcons
                    name={'move-to-inbox'}
                    size={24}
                    style={{color:tintColor}}
                />
            }
        }
    }
},{
    initialRouteName:'Page4',
    contentOptions: {
        activeTintColor:'#e91e63'
    },
    contentComponent: (props) => {
        return <ScrollView style={{backgroundColor:'#789',flex:1}}>
            {/*用于适配全面屏*/}
            <SafeAreaView forceInset={{top:'always',horizontal:'never'}}>
                <DrawerItems {...props}/>
            </SafeAreaView>
        </ScrollView>
    },
    drawerLockMode: 'unlocked',//设置是否响应手势

})


//创建导航器(包含底部和顶部导航器,抽屉导航器)
export const AppStackNavigator = createStackNavigator({
        HomePage: {
            screen:HomePage
        },
        Page1: {
            screen:Page1,
            navigationOptions: ({navigation}) => ({
                title: `${navigation.state.params.name}页面名`   //动态配置
            })
        },
        Page2: {
            screen:Page2,
            navigationOptions: {  //在这里定义每个页面的导航数据,静态配置
                title:'This is Page2'
            }
        },
        Page3: {
            screen:Page3,
            navigationOptions: (props) => {
                const {navigation} = props;
                const {state,setParams} = navigation;
                const {params} = state;
                return {
                    title:params.title ? params.title: 'This is Page3',
                    headerRight: (
                        <Button title={params.mode === 'edit' ? '保存' : '编辑'} onPress={() => {
                            setParams({mode: params.mode === 'edit' ? '' : 'edit'})
                        }}/>
                    )

                }
            }
        },
        Page4: {
            screen:Page4,
            navigationOptions: {
                title:'This is Page4'
            }
        },

        Bottom: {
            screen:BottomNavigator,
            navigationOptions: {
                title: 'BottomNavigator'
            }
        },
        Top: {
            screen:TopNavigator,
            navigationOptions: {
                title:'TopNavigator'
            }
        },
        DrawerNav: {
            screen:DrawerNavigator,
            navigationOptions: {
                title:'DrawerNav'
            }
        }
})

 

github: https://github.com/2402zmybie/react_native_navigation/tree/master

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

React Native未来导航库:react-navigation 使用详解(基础篇) 欢迎大家关注【跨平台开发那些事】公众号,定期推送跨平台开发技术实践。 上篇博客和大家分享了关于React Native jsBundle预加载,界面启动优化的内容,详情可点击: 基于最新版本React Native实现JsBundle预加载,界面秒开优化 一、开源库介绍 今年1月份,新开源的react-natvigation库备受瞩目。在短短不到3个月的时间,gith... 阅读详情

相关推荐

React Native导航器之react-navigation使用

在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation。在讲react-navigation之前,我们先看一下常用的导航组件。导航控件常见的导航主要分为三种: 1.StackNavigator :类似于普通的Navigator,屏幕上方导航栏 2.TabNavigator:obviousl

xiangzhihong8的专栏 2万+

React-Native导航组件React-Navigation的详细介绍

React-Native导航组件React-Navigation的详细介绍一、 导航栏分类二、 具体说明(一). StackNavigator 导航栏1.5 界面跳转和数据传递(1).navigate()-调用这个方法可以跳转到导航器中的其他页面(2) goBack() -关闭当前活跃屏,相当于功能(3)addListener() – 订阅导航生命周期事件变化(4) isFocused() – 查看屏的聚焦状态(5)state – 屏幕的当前状态/路由。

suwu150 8867

React Native页面导航:从Navigator到React Navigation

本文还有配套的精品资源,点击获取 简介:React Native开发中,页面间导航是应用核心,Navigator组件是早期的导航解决方案。尽管已由React Navigation等更先进的库替代,但理解Navigator的原理对掌握RN导航概念仍至关重要。本简介探讨了Navigator组件的工作机制、NavigatorIOS的特定用法,并概述了现代RN导航库的发展。 ...

weixin_42186015的博客 2101

【React Native】react-navigation导航使用方法

上一篇介绍了如何在已有iOS项目中集成React Native。这一篇我们把上一篇的demo做下拓展,添加点击电影跳转到详情页。页面跳转使用React Native推荐的第三方导航控件:react-navigation 集成react-navigation 根据官方指引,在终端cd到项目根目录,分别输入以下命令进行集成: npm install --save react-native-navi...

dolacmeng的专栏 3071

宏基因组分析|从Binning到MAG优化的全流程实战指南

本文提供了一份宏基因组分析从Binning到MAG优化的全流程实战指南。详细解析了宏基因组分箱(Binning)的核心原理与必要性,并手把手指导如何利用Bowtie2、MetaBAT2和CheckM等工具构建分箱流水线,进行质量评估与筛选,最终获得高质量宏基因组组装基因组(MAG)。文章还分享了常见问题排查与进阶优化策略,为后续物种分类、功能注释等深度分析奠定坚实基础。

weixin_29260291的博客 451

STM32 RC522串口驱动程序 (简单直接)

rc522作为使用非常多的读写卡芯片,使用SPI芯片读写应用已经非常广了。但有些时候我们只有串口可以使用,或者我们觉得串口使用更加方便,那么就必须要编写串口的驱动程序。不过很难找到可以直接使用的串口程序。所以在此将我这边写好的串口驱动写好如下: 直接上代码 下面是RC522.C的驱动文件。支持读写卡号8位数据。rc522用的是stm32 的串口3,调试显示是串口1; #include "rc522.h" #include "delay.h" /////////////////////////////////

qq_42074368的博客 9000

React Native Airbnb Clone:如何实现Redux状态管理与React Navigation集成

React Native Airbnb Clone是一个使用React Native和Redux构建的Airbnb应用克隆项目,本文将详细介绍如何在该项目中实现Redux状态管理与React Navigation的集成,帮助开发者快速掌握移动应用开发的核心技能。 ## 项目概述 React Native Airbnb Clone项目旨在通过React Native框架和Redux状态管理库,构

gitblog_00679的博客 1005

MTK Tunning ISP 模块面试总结

ISP面试问答

m0_72053187的博客 4535

React Native导航最佳实践:React Navigation 5的完整使用教程

React Native导航是构建跨平台移动应用的核心功能之一,而React Navigation 5作为目前最流行的导航解决方案,为开发者提供了强大而灵活的工具。本文将为你提供React Navigation 5的终极指南,帮助你掌握React Native应用中的导航最佳实践,构建流畅的用户体验。 ## 📱 为什么选择React Navigation 5? React Navigatio

gitblog_00502的博客 888

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 479

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 754

Antd Admin 文档站(antd-admin-docs)实战指南:基于 Next.js App Router 与 Nextra 4 的中文技术文档体系搭建

`antd-admin` 仓库在 `apps/basic`(Vite+ 单语言模板)与 `apps/with-lingui`(Vite+ Lingui 双语模板)之外,同仓维护了一个独立的文档站应用 `apps/docs`(包名 `antd-admin-docs`)。本指南以 [apps/docs/README.md](https://link.gitcode.com/i/fd6a58de4051

gitblog_01199的博客 1072

072、LLC谐振变换器的谐振电容选型

文章摘要: 本文深入探讨了LLC谐振变换器中谐振电容的选型要点。作者通过实际案例指出,谐振电容的高频特性(如ESR、ESL)会显著影响LLC性能,导致死区振铃或EMI问题。对比薄膜电容(稳定性好但体积大)和MLCC(体积小但存在直流偏置与温漂缺陷),建议100W以上优先选薄膜电容。强调需关注容值精度、耐压、纹波电流及布局对称性,避免寄生参数引发谐振异常。最后提出验证方法(热成像与波形观测)及选型清单,并分享经验:薄膜电容可靠性更优,MLCC需严格测试,布局时应缩短走线以降低环路辐射。

Jack010169的博客 225

React Native搭建简单的项目框架React Navigation + redux

React Native搭建简单的项目框架 React Native 是Facebook于2015年4月开源的跨平台移动应用开发框架, 短短的一两年的发展就已经有很多家公司支持并采用此框架来搭建公司的移动端的应用, React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。 虽然可能没有说的那么厉害,但是我们不可否认,它在统一...

spicyShrimp的博客 2616

【GameFramework框架内置模块】15、场景(Scene)

场景(Scene)模块,提供场景管理的功能,负责场景的加载、卸载、切换和管理。可以方便地管理不同场景之间的切换以及不同场景之间的信息传递。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1882

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

终极React Native食谱应用recipes-app-react-native:10分钟快速上手指南 [特殊字符]

想要快速构建一个功能完整的移动端食谱应用吗?recipes-app-react-native是一个基于React Native的开源项目,专门为想要学习移动应用开发的新手和开发者设计。这款精美的食谱应用模板包含了所有你需要的功能:食谱浏览、分类筛选、食材管理、搜索功能等,让你在10分钟内就能启动一个专业的移动应用项目! ## 🎯 为什么选择这个React Native食谱应用? recipe

gitblog_00439的博客 923

android 蓝牙通讯demo

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

React Native入门篇—react-navigation路由配置

本人学习React Native没有看过任何教学视频,都是按照官网一步步学习的。只研究了Android开发,所以下面的教程都是Android开发教程。 注意:未经允许不可私自转载,违者必究 React Native官方文档:https://reactnative.cn/docs/getting-started/ react-navigation官方网站:https://reactnavi...

长腿欧巴的博客 2969

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

Sentry JavaScript SDK 新增 AI Provider 集成开发指南:Instrumentation、模式选型与实现清单

> 本文基于 sentry-javascript 仓库中面向贡献者的内部技能文档 `add-ai-integration` 编写,系统地讲解如何为 Sentry JavaScript SDK 新增一个 AI Provider(OpenAI、Anthropic、Vercel AI、LangChain、Google GenAI、Mastra 等)的追踪集成。你将掌握:三种接入模式的选型逻辑(原生 tr

gitblog_00887的博客 208

React Native Express导航实战:React Navigation完全指南

React Native Express是全面的React Native学习指南,而导航是移动应用开发的核心部分。本文将带你快速掌握React Navigation的使用方法,从基础安装到高级路由管理,让你轻松实现专业级应用导航功能。 ## 为什么选择React Navigation? React Navigation是React Native生态中最受欢迎的导航库,它提供了跨平台一致的导航体

gitblog_00926的博客 989

react-native 和 react-navigation

react-native 的 flex 默认方向是纵向的 获取设备宽度、高度、分辨率 <View> <Text>当前设备的宽度:{Dimensions.get('window').width}</Text> <Text>当前设备的高度:{Dimensions.get('window').height}</Text> <T...

肖的博客 522

Wechaty插件开发实战:编写、参数化与发布聊天机器人自定义插件

Wechaty是一款面向聊天机器人开发者的对话式 RPA SDK,而 Wechaty插件开发 正是让机器人能力"可插拔"的那一层:不改 SDK 源码,就能为现有机器人追加消息回复、业务分流等新行为。这篇指南带你走完一条完整链路——从最小可运行环境,到自定义关键词回复插件的编写与注册,再到参数化、多插件组合,最后把插件打包成可分发的 npm 模块。 ## 插件能做什么 在动手之前,先看看插件到底

gitblog_00002的博客 123

React-Native使用react-navigation导航遇到的Unable to resolve SafeAreaContext 问题及解决办法

1、安装依赖包 npm install --save react-native-gesture-handler react-native-reanimated react-native-screens react-navigation react-navigation-stack react-navigation-tabs 或是 yarn add react-native-gesture-handler react-native-reanimated react-native-screens react-

一键写代码的博客 4934

react-native 学习六 react-navigation

安装教程: 安装的时候,一定要退出,模拟器,负责,安装失败,很慢 1.npm install --save react-navigation 2.npm install --save react-native-gesture-handler 3.react-native link react-native-gesture-handler ios 什么都不需要做: 为了完成react-native-...

weixin_42262889的博客 149

React Native Tabs vs 其他标签组件:如何选择最适合的解决方案

React Native Tabs 是一个跨平台的标签组件,可用于底部标签栏和分段视图(带标签按钮),为移动应用开发提供灵活的导航解决方案。在众多 React Native 标签组件中,选择合适的工具对项目成功至关重要。 ## 为什么选择 React Native Tabs? React Native Tabs 具有多项优势,使其在竞争中脱颖而出: - **内容与标签栏解耦**:将内容视图与

gitblog_00185的博客 667
上一篇: ssh框架之struts2_day02
下一篇: react-native学习二: Redux
zmybiealex
博客等级 码龄10年 48粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值