在浏览器中进行深度学习:TensorFlow.js (五)构建一个神经网络
ztj100 2025-06-13 18:13 41 浏览 0 评论
这一次我们终于可以开始真正的深度学习了,从一个神经网络开始。
神经网络(Neural Network)是深度学习的基础,基本概念包括:神经元,层,反向传播等等。如果细讲我估计没有五到十篇文章那是讲不完的。简单说它模拟了大脑神经元工作的方式,利用把多个神经元组合成网络结构的模型来对数据进行分类。
- 神经网络是一个多层结构的反馈网络,包括输入,输出和隐藏层。
- 每一层由若干个神经元组成。
- 整个网络利用反向传播,反馈输出的结果和期望值的差异来进行学习。
- 可以理解网络是一个函数ouput=function(input), 随着网络层次的加深,神经网络可以模拟一个非常复杂的非线性函数,当然学习的成本就更高,因为要学习的参数会随着层数和每一层的神经元的个数增加而增加。
TensorFlowJs提供了对神经网络/深度神经网络提供了很好的支持。包括:模型 tf.model, 层 tf.layer。
下面我们就看看如果利用TensorFlowJS来构建一个简单的神经网络来进行MINST数据的手写识别。
构建网络
以上代码构建了一个有两个隐藏层的神经网络,第一层有32个神经元,第二层有256个神经元。
- tf.sequential 构建一个序列化的网络模型,这样的网络每一层的输出连接到下一层的输入,类似一个有每一层组成的栈。不存在分支或者跳跃。
- 利用model.add向模型中增加一层
- tf.layers.dense提供一个全联接的层。units定义了该层的神经元个数。inputShape是输入数据的形状。网络中第一层必须明确指定输入形状,其余的层默认从前面的层输入。
- 最后一层决定了分类器的结果,所以我们使用softmax作为激活函数,units为10,表示10的数字0-9的分类结果。
网络初始化
- 初始化模型,定义学习率,优化器
- 调用model.compile方法,定义损失函数。
训练网络
- 训练的核心方法是调用model.fit(x,y,config)方法。x是训练数据,y是训练的分类标签。config是可选项。
- 在训练过程中,我们使用testBactch来做验证,计算准确率。结果存入model.fit的返回值中。
- 调用dispose方法释放tensor占用的内存
- tf.nextFrame() 返回一个Promise,主要用于Web动画。static nextFrame(): Promise<void> { return new Promise<void>(resolve => requestAnimationFrame(() => resolve())); }
通过改变模型的层数和每一层神经元的个数,我们可以评估该模型是否有效。
Batch :16 神经元 :32+256 准确率 :0.84
Batch :64 神经元 :32+256 准确率 :0.92
Batch :16 神经元 :32+256+256+32 准确率 :0.75
Batch :16 神经元 :32+256+256+256 准确率 :0.11
我们发现网络也并非越深越好,在最后一个4层的例子中,训练的损失很高,效果很差。
在深度学习中如果定义这些超参数(hyperparameter),真的很难。
较大的batchSize效果比较小的要好,但是由于浏览器内存的限制,我们无法加载较大的Batch训练数据。
更多的发现留给大家去尝试。
神经网络的种类有很多,以后有机会我们可以继续了解。
参考:
相关推荐
- Java的SPI机制详解
-
作者:京东物流杨苇苇1.SPI简介SPI(ServiceProvicerInterface)是Java语言提供的一种接口发现机制,用来实现接口和接口实现的解耦。简单来说,就是系统只需要定义接口规...
- 一文读懂 Spring Boot 启动原理,开发效率飙升!
-
在当今的Java开发领域,SpringBoot无疑是最热门的框架之一。它以其“约定大于配置”的理念,让开发者能够快速搭建和启动应用,极大地提高了开发效率。但是,你是否真正了解Spring...
- ServiceLoader
-
ServiceLoader是Java提供的一种服务发现机制(ServiceProviderInterface,SPI)...
- 深入探索 Spring Boot3 中的自定义扩展操作
-
在当今互联网软件开发领域,SpringBoot无疑是最受欢迎的框架之一。随着其版本迭代至SpringBoot3,它为开发者们带来了更多强大的功能和特性,其中自定义扩展操作更是为我们在项目开发中...
- Spring Boot启动过程全面解析:从入门到精通
-
一、SpringBoot概述SpringBoot是一个基于Spring框架的快速开发脚手架,它通过"约定优于配置"的原则简化了Spring应用的初始搭建和开发过程。...
- Spring Boot 3.x 自定义 Starter 详解
-
今天星期六,继续卷springboot3.x。在SpringBoot3.x中,自定义Starter是封装和共享通用功能、实现“约定优于配置”理念的强大机制。通过创建自己的Starte...
- Spring Boot 的 3 种动态 Bean 注入技巧
-
在SpringBoot开发中,动态注入Bean是一种强大的技术,它允许我们根据特定条件或运行时环境灵活地创建和管理Bean。相比于传统的静态Bean定义,动态注入提供了更高的灵活性和可...
- 大佬用4000字带你彻底理解SpringBoot的运行原理!
-
SpringBoot的运行原理从前面创建的SpringBoot应用示例中可以看到,启动一个SpringBoot工程都是从SpringApplication.run()方法开始的。这个方法具体完成...
- Springboot是如何实现自动配置的
-
SpringBoot的自动配置功能极大地简化了基于Spring的应用程序的配置过程。它能够根据类路径中的依赖和配置文件中的属性,自动配置应用程序。下面是SpringBoot实现自动配置的...
- Spring Boot3.x 应用的生命周期深度解析
-
SpringBoot应用的生命周期可以清晰地划分为三个主要阶段:启动阶段(Startup)...
- Springboot 启动流程及各类事件生命周期那点事
-
前言本文通过Springboot启动方法分析SpringApplication逻辑。从静态run方法执行到各个阶段发布不同事件完成整个应用启动。...
- Spring框架基础知识-常用的接口1
-
BeanDefinition基本概念BeanDefinition是Spring框架中描述bean配置信息的核心接口,它包含了创建bean实例所需的所有元数据。...
- Java 技术岗面试全景备战!从基础到架构的系统性通关攻略分享
-
Java技术岗的面试往往是一项多维度的能力检验。本文将会从核心知识点、项目经验到面试策略,为你梳理一份系统性的备战攻略!...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)