《Kotlin入门实战》CH9 | 文件IO,正则和多线程

Kotlin实战指南十六:Synchronized、Volatile 文章目录如何创建线程 如何创建线程 在Kotlin 中,我们仍然可以使用 java 的语法创建一个线程 Thread(Runnable { }).start() //或者使用 Lambda 表达式 Thread { }.start() 事实上,kotlin 为我们提供了一个简单写法: Kotlin中可以使用thread()方法创建新的线程,指定的语句块将在新线程中运行。语法简单,十分易用。 fun main() { thread { Log.d("ya 阅读详情

文件IO,正则和多线程

得益于kotlin的扩展函数,kotlin对java中api进行了改进,对于java中好用的api直接使用,对于不好用的api进行了扩展和改进。

1 文件IO操作

读写

fun main() {
    val f = File("test.txt")

    // 写入文件
    f.writeText("hello kotlin") // 默认为utf-8,覆盖写
    f.appendBytes(ByteArray(1).apply { this[0] = '\n'.toByte() }) // 追加一个字节
    f.appendText("hello io")  // 追加字符串

    // 读取文本中所有数据
    val s = f.readText() // 默认为utf-8
    val ss = f.readLines() // 返回 List<String> 类型
    val bs  = f.readBytes() // 返回 ByteArray 相当于Java中的 Byte[]

    // 分块读取数据
    val buffer = f.bufferedReader()
    while(true){
        val line = buffer.readLine()
        if(line == null) break
        else println(line)
    }
}

编码格式默认选择utf-8

分块写入数据

fun main() {
    val f = File("test2.txt")
    val writer  = f.bufferedWriter()
    writer.appendln("line 1")
    writer.newLine()
    writer.appendln("line 2")
    //writer.flush()
    writer.close()
}

这里最好使用flush或者close,否则数据可能停留在缓冲区

遍历文件夹

fun main() {
    val f = File("E:\\课件\\")
    val walk = f.walk()
    
    walk.forEach { println(it.absoluteFile) } // 递归打印所有文件
    
    println("-------------分隔符---------------")
    
    val filter =walk.filter { it -> it.name.contains("网络安全") }
    filter.iterator().forEach { println(it.absoluteFile) }
}
E:\课件\网络安全
E:\课件\网络安全\网络安全
E:\课件\网络安全.zip
-------------分隔符---------------
E:\课件
E:\课件\批判阅读
E:\课件\批判阅读\Unit One.doc
E:\课件\网络安全
E:\课件\网络安全\网络安全
E:\课件\网络安全\网络安全\crypto-10.ppt
E:\课件\网络安全\网络安全\crypto-11.ppt
E:\课件\网络安全\网络安全\crypto-13.ppt
E:\课件\网络安全\网络安全\crypto-14.ppt
...

递归复制文件

fun main() {
    val f = File("./")  // 当前项目文件夹
    val target = File("../tmep/")   //  复制到上一级目录
    f.copyRecursively(target, true) //  递归复制
}

2 网络IO

fun main() {
    val html = URL("https://www.baidu.com").readText()
    println(html) 
}

3 执行shell指令

只需要对String类进行扩展即可

fun String.execute(): Process {
    return Runtime.getRuntime().exec(this)
}

fun Process.text(): String {
    val isr = InputStreamReader(this.inputStream)
    val reader = BufferedReader(isr)
    var line: String? = "";
    var out = ""
    while (line != null) {
        line = reader.readLine()
        out += line + "\n"
    }
    return out
}

这样就可以这样调用指令了

val p = "ls -al".execute()
val text = p.text()

4 正则表达式

matches

  • 全部匹配为true,否则为false

    val b1 = Regex("[a-z]+").matches("abcABC")  //false
    val b2 = Regex("[a-z]+", RegexOption.IGNORE_CASE).matches("abcABC") // true
    
    

containsMatchIn

  • 字符中至少一处匹配返回true

    val b3 = Regex("[0-9]+").containsMatchIn("012abc")  // true
    

matchEntire

  • 如果全部匹配则规则则返回对象

    val s4 = Regex("[0-9]+").matchEntire("1234abc")?.value 
    

replace

replaceAll

find

findAll

fun main() {
    val r1 = Regex("[a-z]+") //创建一个Regex 对象,匹配的正则表达式是[a-z]+
    val r2 = Regex("[a-z]+", RegexOption.IGNORE_CASE)

    val b1 = Regex("[a-z]+").matches("abcABC")  //false
    val b2 = Regex("[a-z]+", RegexOption.IGNORE_CASE).matches("abcABC") // true
    val b3 = Regex("[0-9]+").containsMatchIn("012abc")  // true

    val s4 = Regex("[0-9]+").matchEntire("1234abc")?.value
    println(s4)     // null

    val s5 = Regex("[0-9]+").replace("12abc", "xxxx")
    val s6 = Regex("[0-9]").replace("1ABC2Z") { (it.value.toInt() *                             it.value.toInt()).toString() }
    
    val s7 = Regex("[0-9]+").find("12BAC3D")
    
    Regex("[0-9]+").findAll("12BAC3D").forEach { println(it.value) }  // 12 3

    // 使用Java正则表达式API
    val re = Regex("[0-9]+")
    val p = re.toPattern()
    val m = p.matcher("888ABC999")
    while (m.find()) {
        val d = m.group()
        println(d)
    }// 888 999
}

5 多线程编程

Kotlin中没有synchronized、volatile关键字。Kotlin的Any类似于Java的Object,但是没有wait()、notify()和notifyAll()方法。

创建线程

扩展Thread类或者进行实例化并通过构造函数传递一个Runnable。因为我们可以很容易地在Kotlin中使用Java类,所以这两个方式都可以使用。

fun main() {
    //object 对象表达式,匿名类继承
    object : Thread() {
        override fun run() {
            Thread.sleep(3000)
            println("A 使用Thread 对象表达式: ${Thread.currentThread()}")
        }
    }.start()

    // Lambda 表达式,实际上 lambda 代替 runnable接口作为参数传入
    Thread {
        Thread.sleep(2000)
        println("B 使用Lambda 表达式: ${Thread.currentThread()}")
    }.start()

    // 使用kotlin封装的thread函数
    thread(start = true, isDaemon = false, name = "DThread", priority = 3) {
        Thread.sleep(1000)
        println("D 使用Kotlin 封装的函数thread(): ${Thread.currentThread()}")
    }

}

同步方法和块

synchronized不是Kotlin中的关键字,它替换为@Synchronized注解。

fun main() {
    @Synchronized fun f() {

    }
    // 同步代码块
    fun f2(){
        synchronized(Any()){

        }
    }
}

和Java的代码基本上一样

可变字段

Kotlin中没有volatile关键字,取而代之的是@volatile注解,效果和volatile一致

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 249

10种Kotlin锁同步技术

多线程编程在 Kotlin 中具有巨大的潜力,可以构建响应迅速、高效的应用程序。然而,随着并发能力的增强,同步访问共享资源以防止数据损坏和竞争条件的挑战也随之而来。在本文中,我们将深入探讨 Kotlin 中的同步世界,探索确保应用程序线程安全和健壮性的最佳实践和技术。同步是协调多个线程对共享资源的访问的过程,以保持数据完整性和一致性。在 Kotlin 中,当涉及到对可变状态(如共享变量、数据结构或关键代码段)的并发访问时,同步至关重要。

虎哥LoveDroid 3147

Kotlin中线程同步的几种方法

本文介绍了Kotlin中线程同步的几种常见方法,包括使用synchronized关键字、ReentrantLock和Semaphore。根据具体的需求和场景,我们可以选择适合的线程同步方法来实现线程安全的代码。ReentrantLock是Java提供的另一种线程同步机制,它也可以在Kotlin中使用。在Kotlin中,线程同步是一种重要的技术,用于确保多个线程能够正确地协同工作,避免出现竞态条件和数据不一致等问题。它可以用来修饰方法或代码块,确保同一时间只有一个线程可以进入被修饰的代码区域。

2301_79326588的博客 1398

在Kotlin伴生类中使用@Synchronized的问题记录

kotlin伴生类的静态方法使用@synchronized的问题记录

weixin_42344241的博客 565

浅析 Kotlin 中的 synchronized

首先,在 Java 中 synchronized 是一个关键字,在Kotlin 中是一个函数。这个函数如下: /* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0...

AI天才研究院 1万+

基于PaddleOCR的离线多语言SDK集成与实战指南

OCR(光学字符识别)技术通过计算机视觉与深度学习算法,将图像中的文字转换为可编辑和可搜索的文本数据。其核心原理通常涉及文本检测、方向分类和文本识别等多个阶段,通过卷积神经网络(CNN)和循环神经网络(RNN)等模型提取并理解图像中的文字特征。这项技术的价值在于极大地提升了信息数字化的效率与自动化水平,广泛应用于文档电子化、票据处理、工业自动化、移动应用和边缘计算等场景。特别是在对数据隐私、网络延迟和离线可靠性有严苛要求的工业级应用中,离线OCR SDK成为关键解决方案。本文聚焦于基于PaddleOCR框架

chubaisheng8627的博客 320

Kotlin 4. Kotlin 函数注解:Suppress,Volatile, Synchronized, Bindable, RequiresApi,SerializedName

这篇博客我们解释 Kotlin 函数注解:Suppress,Volatile, Synchronized, Bindable, RequiresApi,SerializedName 等。

破浪会有时的博客 1394

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

Kotlin中的线程安全

一、背景 线程安全问题由全局变量和静态变量引起,多个线程同时对统同一对象进行写操作,就可能发生每个线程读取到的值不一样。简而言之,如果在线程中不对变量进行写操作,值进行读操作,就可以避免线程安全。 二、加锁 锁可以分为实例锁和全局锁,通用的方法有Synchronized关键字和Lock方法进行加锁 实例锁:对某一个对象加锁,如果该对象的类的单例类,将同时也和全局锁一样 全局锁:对某一类加锁,该类的所有对象都会加锁,持有类锁的线程将会同时持有全部对象的锁 三、Synchronized 我们复习一下java中的

分享Android开发知识 4130

用LT1166+MOS管打造实验室级恒流源:闭环反馈与推挽驱动的深度调优

本文详细介绍了基于LT1166电流模式控制器与MOS管推挽架构的实验室级恒流源设计方法。通过闭环反馈调优和动态响应优化,实现带宽达100kHz、纹波低于0.1%的高性能恒流输出,适用于精密仪器校准和半导体测试等场景。重点解析了系统架构设计、MOS管选型策略以及频率响应测试等关键技术要点。

weixin_29290379的博客 205

WPS JS宏实战:批量调整200个Word表格格式的避坑指南(附完整代码)

本文提供了一份详尽的WPS JS宏实战指南,针对批量调整大量Word表格格式的需求。文章深入解析了如何利用JS宏自动化设置字体、行距和边框,并重点解决了常见的“首行访问报错”等核心难题,附有可直接使用的完整代码,帮助用户显著提升文档处理效率。

weixin_29280219的博客 429

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

Matlab结果性能评价---rms函数(计算矩阵、数组和向量元素均方根)

实例1:创建一个向量(正弦波)并计算其均方根值 实例2:创建一个二维矩阵并计算其均方根值 实例3:计算二维矩阵沿指定维度的均方根值 本例程配套完整源码下载 均方根(Root-Mean-Square Level): 向量x的均方根值为沿着指定的维度执行求和: 语法描述: y = rms(x)返回输入x的均方根值。如果x是行或列向量,y是实数值标量。对于大小尺寸大于1矩阵x,y包含沿x的第一个数组维度计算的均方根值。例如,如果x是N > 1的N*M矩阵,那么y是1*M行向量,对应x矩..

qq_32809093的博客 3万+

Kotlin中IO流

Kotlin文件中的IO流 这两天没有写博客,可能是因为比较懒吧,不太想学习了,因为觉得真的好累,学了后面忘记前面,搞的自己没自信了,今天学习了IO流,把学到的内容来总结一下 Kotlin的IO流几乎和JAVA是一模一样的,但是Kotlin对这些方法和类做了一些扩展,让我们非常的方便的去读写内容,具体可看下面代码 fun main(args: Array) { FileInputStream("...

小亮的博客 2075

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

YOLO学习笔记 | YOLOv8与卡尔曼滤波实现目标跟踪与预测(附代码)

YOLOv8采用改进的CSPDarknet骨干网络和动态标签分配策略,提供高精度、实时的目标检测能力。使用IOU(交并比)或马氏距离作为代价矩阵,通过匈牙利算法匹配预测框与检测框,解决多目标ID分配问题。卡尔曼滤波通过状态方程和观测方程对目标运动建模,结合预测与观测数据优化状态估计。完整代码需结合具体场景调整参数,并补充匈牙利算法实现(可参考。匈牙利算法(Hungarian Algorithm)是解决。的高效方法,常用于目标跟踪中的。),作为跟踪的输入观测值。(将检测框与预测框匹配)。

尘世冰封的专栏 1249

Kotlin 的锁和多线程同步

作为结论,在 Kotlin 上最好用的线程同步方案首推协程。作者:JeffreyWorld链接:https://www.jianshu.com/p/7dbd035d152d来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

chuyouyinghe的专栏 3786

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

AI赋能,使用DeepSeek 高效制作PPT实战详解

congge 1万+

Kotlin 中的正则表达式

正则表达式通常是指用于搜索字符串或替换正则表达式对象的正则表达式。要使用它的功能, 我们需要使用Regex(pattern:String)类。Kotlin的Regex类可在kotlin.text.regex包中找到。Kotlin Regex构造函数Regex(pattern: String)它根据给定的字符串模式创建一个正则表达式。正则表达式(模式:字符串, 选项:Reg...

qxf865618770的博客 3429

全志 camera: 4路AHD摄像头转MIPI

TP2815 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 MIPI 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 9093

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Kotlin线程同步

在Kotlin中处理多线程并发时,线程同步是确保数据一致性和避免竞态条件的关键技术。块: 这是最基本的同步方式,通过对指定对象加锁来保证临界区的互斥访问。原子变量: Kotlin提供了Mutex在处理UI更新时,要特别注意Android的主线程限制,可以使用或Handler来确保UI操作在主线程执行。在Kotlin中处理多线程并发时,线程同步是确保数据一致性和避免竞态条件的关键技术。块: 这是最基本的同步方式,通过对指定对象加锁来保证临界区的互斥访问。原子变量: Kotlin提供了Mutex。

Made In SQL 1350

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Kotlin协程】避免在suspend函数中使用@Synchronized修饰符

使用Kotlin时,我们通常使用@Synchronized实现线程间同步,因此很多刚接触协程的同学,视图在挂起函数上添加@Synchronized以实现”协程间同步”,这是否有效呢? 1. 协程+Synchronized ? 通常,协程可以帮助我们执行并行任务: suspend fun doSomething(i: Int) { println("#$i enter critical section.") // do something critical delay(1000).

移动端开发干货分享 4176

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

【2023】Kotlin教程 第三篇 Kotlin进阶 第21章 Kotlin IO与文件管理 21.1 Java IO流技术概述 21.1.2 Java流类继承层次

【2023】Kotlin教程 第三篇 Kotlin进阶 第21章 Kotlin IO与文件管理 21.1 Java IO流技术概述 21.1.2 Java流类继承层次

代码改变世界 444

Kotlin 协程的并发问题

使用 Java 方式解决并发问题 synchronized 问题 使用 Kotlin 方式解决并发问题 单线程并发 Mutex 同步锁 mutex.withLock{} Actor 避免共享可变状态

xiangxiongfly 5332

kotlin中的文件和IO流,王者笔记,万字长文轻松彻底入门Flutter

BufferedReader需要套接在其他的Reader上使用,所以创建时需要传入一个Reader,例如传入一个FileReader,BufferedWriter也是如此。也可以通过Reader和Writer类的扩展函数buffered()返回一个创建好的BufferedReader或BufferedWriter。BufferedReader继承自Reader,所以Reader类的扩展函数,BufferedReader同样也可以使用。

1186
上一篇: 《Kotlin入门实战》CH8 | 泛型
下一篇: 基础 | Broadcast
KriyWu
博客等级 码龄9年 3粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值