首页 文章 精选 留言 我的

精选列表

搜索[个人知识库],共10000篇文章
优秀的个人博客,低调大师

【个人学习JAVA---学后的梳理】三、浅纳Java的数据类型

Java数据类型的简单归纳打理,顺带补上 常量与变量 1. 编程元素---常量与变量 1.1:常量 顾名思义,常量就是固定不变的量(不变的是其直接对象地址),即:定义完成就无法被改变。 声明常量的语法如下: final <数据类型> <常量名>[=赋值]; 进一步说明,常量的名称就采用全大写字母,以便区分于其他变量。其中定义的关键字final,不仅定义于变量,还用于定义类的成员方法,这就意味着被final定义的方法将不会再被改变。 1.2: 变量 变量是利用声明的方式,将内存中的某个块保留下来供该程序使用。 不管变量的值如何更改,所指向的,使用的,都是同一内存空间。变量的作用范围:作用范围,也就是意味着在范围内,该变量名才会有意义、有作用。 那么,不同范围内的变量名是可以存在重名的,程序的运行时访问原则是就近原则,向上查找该变量名。 在一个类中,变量根据范围,有两种类型: 成员变量类主体中定义的变量为成员变量。其作用范围是在整个类都能访问到。 局部变量在某个方法,某个代码块,某个循环里所定义的变量,其只在这些局部的范围内有意义。 2. Java的数据类型 在Java中规定了8种基本数据类型,也存在引用类型的数据类型。如下图示: 图1-Java数据类型图 2.1:8种基本数据类型 数据类型 说明 位 可表示的数据范围 默认初值 long 长整数 64 能保存宇宙中最大的整数(正负) 0L int 整数 32 -2147483648 ~ 2147483647 0 short 短整数 16 -32768 ~ 32767 (short)0 byte 位 8 -128 ~ 127 (byte)0 char 字符 2 0~255 u000(空) float 单精度 32 可有6、7个小数位的精确度 0.0f double 双精度 64 可有15个小数位的精确度 0.0d 2.1.1: byte类型 1个字节有8位。 byte类型数据占据1个字节的内存空间。 2.1.2. short类型 赋值整数前以"(short)"表示该整数类型是short类型,否则是int型。 short类型数据占据2个字节的内存空间。 2.1.3: int类型 Java中默认的整数数据类型就是int型。数据溢出时,溢出的数值将与该类型的最小数值相加后再赋值。也就是说,MAX_VALUE+n后的值是MIN_VALUE+[n-1]。 int类型数据占据4个字节的内存空间。 2.1.4: long类型 long类型数据占据8个字节的内存空间。 2.1.5: char类型 char类型数据占据2个字节的内存空间。 2.1.6: float类型 float类型数据占据4个字节的内存空间。 2.1.7: double类型 double类型数据占据8个字节的内存空间。 2.1.8: boolean类型 boolean类型数据只有true、false两个值,默认初值为false。 明显,布尔值是确定判断的真假。当然,真假的表示不仅仅是true与false,还能用数字,也就是说:非正数表false,正数表true。 2.2:引用数据类型 引用,就是一个指向了类的实例化对象的变量,那么该变量就属于引用数据类型。 3. 数据类型的转换 数据类型的有着严格的限制,实现类型转换须经过严格的步骤和规定。 转换方式有着两种。 3.1. 自动类型转换 自动转换即是向上类型转换。 自动转换的两个前提条件: 转换前的数据类型与转换后的类型兼容; 转换后的数据类型的表示范围比转换前的类型大(向上)。 3.2. 强制类型转换 强制转换须以“(转换后的类型)oldData”格式进行。如果强制向下转换,转换后的数据可能相比转换前,会丢失精度。 结束 2019年8月6日 15:49:58

优秀的个人博客,低调大师

Keras快速上手——打造个人的第一个“圣诞老人”图像分类模型

首发地址:https://yq.aliyun.com/articles/288077 2017年已到最后一个月的尾巴,那圣诞节还会远吗?不知道各位对于圣诞节有什么安排或一些美好的回忆,我记得最清楚的还是每年圣诞节前一晚那些包装好的苹果,寓意平平安安。那谈到圣诞节,不可或缺的主角——“圣诞老人”会出现在各地的大街小巷、各种画册上,本文将带领读者使用Keras完成“圣诞老人”图像的分类,算是圣诞节前的预热活动吧。 在介绍正式内容前,读者可以先看这篇内容: 如何利用谷歌图片获得训练数据 在本教程的第一部分,将介绍本文使用的数据集;其次使用Python和Keras训练一个卷积神经网络模型,该模型能够检测一个图像中是否存在圣诞老人, 所选的网络结构类似于LeNet网络;最后,在一系列的图像上评估本文搭建的模型,然后讨论一下本文方法的局限性以及如何拓展等。 “圣诞老人”和“非圣诞老人”数据集 为了训练搭建的模型,本文需要两类图像集: 图像含圣诞老人(“圣诞老人”); 图像不包含圣诞老人(“不是圣诞老人”) 上周我们用谷歌图片迅速获取训练图像数据集,数据集中包含461张有圣诞老人的图像中,如图1(左)所示;此外从UKBench数据集中随机获取461张不包含圣诞老人,如图1(右)所示。 基于卷积神经网络和Keras搭建的第一个图像分类器 如图2所示,该图是一个典型的Lenet网络结构,最初被用来数字手写体的分类,现将其扩展到其他类型的图像。 本教程主要是介绍如何将深度学习应用于图像分类中,所以不会对Keras和Python语句介绍得非常详细,感兴趣的读者可以看下Deep Learning for Computer Vison with Python这本书。 首先先定义网络架构。创建一个新文件并命名为lenetpy,并插入以下代码: 第2-8行是需要导入的Python包,其中conv2d表示执行卷积,maxpooling2d表示执行最大池化,Activation表示特定的激活函数类型,Flatten层用来将输入“压平”,用于卷积层到全连接层的过渡,Dense表示全连接层。 真正创建Lenet网络结构是代码的第10-12行,每当定义了一个新的卷积神经网络结构时,我喜欢: 把它放在自己的类中(为了命名空间及便于组织) 创建一个静立建造函数,来完成整个模型的建立 建立的模型时需要大量的参数: weight:输入图像的宽度 height:输入图像的高度 depth:输入图像的通道数(1表示单通道图像灰度,3表示标准的RGB图像) claclasses:想要组织的层类别总数 第1第4行定义我们的模型,第15行初始化inputshape,第18-19行正常更新inputshape 现在我们已经初始化我们的模型,可以开始添加其它层,代码如下: 第21-25行创建第一个CONV->RELU->POOL层,卷积层使用20个大小5x5的滤波器,之后紧跟RELU激活函数,最后使用窗口大小为2x2的最大池化操作; 之后定义第二个CONV->RELU->POOL层: 这次卷积层使用50个滤波器,滤波器个数的增加加深整个网络体系结构。 最终的代码块是将数据“压平”以连接全连接层: 第33行能将maxpooling2d层的输出压扁成一个单向量; 第34行显示全连接层包含500个节点,然后紧跟一个ReLU激活函数; 第38行定义另一个全连接层,该层的节点数等于分类的类别数,Dense 层送入softmax分类器输出每类的概率值; 第42行返回模型的调用函数; 使用Keras训练卷积神经网络图像分类器 打开一个新的文件并命名为train_networkpy,并插入以下代码打开 第2 - 18行导入程序需要的数据包; 下面开始解析命令行参数: 这里有两个需要命令行参数,--dataset和--model,以及accuracy/loss图的路径选择。其中--dataset表示模型的训练集,--model表示训练分类器后保存的模型,如果--plot未指定,则默认为plot.PNG。 接下来,设置一些训练变量、初始化列表并设置图像路径: 第32-34行定义模型的训练次数、初始学习率以及批量大小; 第38和39行初始化数据和标签列表,这些列表对应存储图像以及类别标签; 第42-44行获取输入图像路径并将图像随机打乱; 现在对图像进行预处理: 该循环简单的将每个图像的尺寸重新调整为28×28大小(为LeNet所需要的空间尺寸) 能够提取标签是由于我们的数据目录结构如下所示: 因此,imagePath的一个例子为: 从ImagePath提取标签,结果为: 下一步,将数据集分为训练数据集和测试数据集: 第61行进一步预处理输入数据,按比例将数据点[ 0, 255 ]缩放到[ 0, 1 ]范围内; 然后第66-67行将75%数据作为训练集,25%数据作为测试集;第70-71行对标签进行独热编码;随后,通过以下操作增加数据量: 第74-76行创建一个图像发生器,对数据集图像进行随机旋转、移动、翻转、剪切等,通过这种操作允许我们能用一个较小的数据集实现好的结果。 继续深入学习Keras训练图像分类器: 第80-83行使用Adam优化器,由于本文是一个二分类问题,可以使用二进制交叉熵损失函数(binary cross-entropy)。但如果执行的分类任务多于两类,损失函数更换为类别交叉熵(categorical_crossentropy) 第87-89行调用model.fit_generator开始训练网络,第93行保存模型参数,最后画出图像分类器的性能结果: 为了训练网络模型,需要打开一个终端执行以下命令: 可以看到,当网络训练了25个回合后,模型的测试精度为97.40%,损失函数也很低,如下图所示: 评估卷积神经网络图像分类器 打开一个新的文件并命名为test_networkpy,然后开始进行评估: 第2-7行导入需要的数据包,另外注意导入的load_model是训练过程中保存的模型。 下一步,解析命令行参数: 需要两个命令行参数:--model和输入--image,然后加载图像预处理: 预处理与前面几乎一模一样,这里不做过多的解释,只是第25行通过np.expand_dims对数据额外添加了一个维度,如果忘记添加维度,它将导致调用model.predict时出现错误。现在加载图像分类器模型并进行预测: 第29行加载模型,第32行做出预测。最后画出头像以及预测标签: 第35行建立标签,第36行选择对应的概率值,第37行将标签文本显示在图像的左上角,第40-42行调整图像大小为标准的宽度以确保它适应电脑屏幕,最后,第45行显示输出图像,第46行表示当一个键被按下结束显示。 以下是包含圣诞老人图像的实验结果: 以下是不包含圣诞老人图像的实验结果: 本文图像分类模型的局限性 本文图像分类器有一些局限性: 第一个是输入图像尺寸28×28很小。一些示例图像(图像中圣诞老人本身已经很小)调整尺寸为28×28后大大降低圣诞老人的尺寸。 最优的卷积神经网络正常接受输入图像大小一般为200-300像素,因此一些较大尺寸的图像将帮助我们建立一个更强大的图像分类器。然而,使用更大的分辨率的图像会加深网络模型的深度和复杂度,这将意味着需要收集更多的训练数据,以及昂贵的计算训练过程。 因此,如果各位读者想提高本文模型的精度话,有以下四点建议: 收集更多的训练数据(超过5000幅“圣诞老人”图像); 利用高分辨率的图像在训练。64×64、128×128像素的图像可能效果会更理想; 在训练过程中使用一个更深层次的网络体系结构; 阅读Deep Learning for Computer Vision with Python,里面有更多关于自定义数据集等内容的细节; 总结 本文教你学会利用Keras和Pyhton训练LeNet模型,并用来完成是否含有圣诞老人形象的图像分类,最终目标可以是建立一个应用程序类似于Not Hotdog; “圣诞老人”图像数据集(460幅)是按照之前的教程——通过谷歌图片采集深度学习的图像获得,而“没有圣诞老人”的图像数据集是由从UKBench数据集中挑选得到; 在一系列的测试图像上评估本文搭建的网络模型,在每一种情况下,本文模型都能对输入图像分类正确。 作者信息 Adrain Rosebrock,企业家、博士,专注于图像搜索引擎。 Linkedin:https://www.linkedin.com/in/adrian-rosebrock-59b8732a/ 本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。 文章原标题《Image classification with Keras and deep learning》,作者:Adrain Rosebrock,译者:海棠,审阅:董邵男。 文章为简译,更为详细的内容,请查看原文 翻译者: 海棠 Wechat:269970760 weibo:Uncle_LLD Email:duanzhch@tju.edu.cn 微信公众号:AI科技时讯

优秀的个人博客,低调大师

(摘取自官网,个人翻译…欢迎校正)

Activity Input validation: Test that an activity responds correctly to input values in an EditText View. Set up a keystroke sequence, send it to the activity, and then usefindViewById(int)to examine the state of the View. You can verify that a valid keystroke sequence enables an OK button, while an invalid one leaves the button disabled. You can also verify that the Activity responds to invalid input by setting error messages in the View. 输入验证:测试一个activity对EditText View输入做出正确地反应.设置按键顺序,并且发送到activity中,还有使用findViewById()用来验证View的状态是否正常.你可以验证一个有效的按键序列在OK按钮上是有效的,当输入一个无效的按键会使按钮失效.你也可以验证当输入无效的设置在View中activity会做出何种反应. Lifecycle events: Test that each of your application's activities handles lifecycle events correctly. In general, lifecycle events are actions, either from the system or from the user, that trigger a callback method such asonCreate()oronClick(). For example, an activity should respond to pause or destroy events by saving its state. Remember that even a change in screen orientation causes the current activity to be destroyed, so you should test that accidental device movements don't accidentally lose the application state. 生命周期事件:测试你每一个应用程序activity 的 handles 在 生命周期里面都是正确的.通常来讲,生命周期事件都是action动作,任何来自于系统或者用户,将会触发回调方法,例如onCreate()或者onClick().举个例子,一个activity应该对pause或者destoryed做出反应来并且保存它的状态.记住,实际上屏幕方向的改变事件会导致当前activity被销毁,所以你应该测试程序在设备运行中发生意外事件时不会偶然间丢失程序的状态. Intents: Test that each activity correctly handles the intents listed in the intent filter specified in its manifest. You can useActivityInstrumentationTestCase2to send mock Intents to the activity under test. Intens:测试每一个activity对指定在manifest的intent-filter里的intents做出正确的处理.你可以使用ActivityInstrumentationTestCase2发送一个模拟Intents 到activity 在测试中 Runtime configuration changes: Test that each activity responds correctly to the possible changes in the device's configuration while your application is running. These include a change to the device's orientation, a change to the current language, and so forth. Handling these changes is described in detail in the topicHandling Runtime Changes. 改变运行时的设置:在程序运行时,测试每个activity都能对可能改变的设备配置做出正确的响应.这些改变包括改变设备的屏幕方向,改变当前语言,等等.Handing这些改变具体描述在Handling Runtime Changes. Screen sizes and resolutions: Before you publish your application, make sure to test it on all of the screen sizes and densities on which you want it to run. You can test the application on multiple sizes and densities using AVDs, or you can test your application directly on the devices that you are targeting. For more information, see the topicSupporting Multiple Screens. 屏幕的兼容性:在你发布你的程序之前,请确认测试好所有你想运行的屏幕大小.你可以使用AVDs测试你的应用程式在多种屏幕大小下,或者你可以直接测试你的程序在目标设备上.更多的信息,可以看这篇Supporting Multiple Screens. Content Provider Test with resolver methods: Even though you can instantiate a provider object inProviderTestCase2, you should always test with a resolver object using the appropriate URI. This ensures that you are testing the provider using the same interaction that a regular application would use. 测试解析方法:尽管你可以在providerTestCase2中实现一个provider,但是你应该始终用一个resolver对象测试合适的 URI.这可以确保你正在测试的provider 是在同一个应用程序中使用同样的操作. Test a public provider as a contract: If you intent your provider to be public and available to other applications, you should test it as a contract. This includes the following ideas: 测试一个公共的provider的协定:如果你想你的provider是一个公共的和可被其它程序访问的,你应该测试它的协定.这里包括了一些主意: Test with constants that your provider publicly exposes. For example, look for constants that refer to column names in one of the provider's data tables. These should always be constants publicly defined by the provider. 测试provider所有公开的常量.比如,在常量中有个列名是归类在provider’s data表中.这些常量应该始终定义在你的provider中 Test all the URIs offered by your provider. Your provider may offer several URIs, each one referring to a different aspect of the data. TheNote Padsample, for example, features a provider that offers one URI for retrieving a list of notes, another for retrieving an individual note by it's database ID, and a third for displaying notes in a live folder. 测试Provider提供的所有URIs.Provider可能提供一些URIs在data中每个都涉及到不同的方式.例如在NOTE PAD 例子中,比如,一个provider提供一个uri 用于回收一个列表的笔记记录,另外一个使用databas Id用于回收一条笔记记录,和 还有一个用于显示笔记在一个折叠面板上 Test invalid URIs: Your unit tests should deliberately call the provider with an invalid URI, and look for errors. Good provider design is to throw an IllegalArgumentException for invalid URIs. 测试无效的URIs:你的单元测试应该故意的调用provider使用一个无效的URI,并且,查看这些错误.在使用无效的URIs时,好的provider的设计是会抛出一个IllegalArgumentException异常. Test the standard provider interactions: Most providers offer six access methods: query, insert, delete, update, getType, and onCreate(). Your tests should verify that all of these methods work. These are described in more detail in the topicContent Providers. 测试标准的provider的操作.很多 providers 提供6个访问方法:查询,插入,删除,更新,获取类型,和onCreate().你的测试应该验证所有这些方法都是正常运行的.这些的详细描述可参阅Content Providers. Test business logic: Don't forget to test the business logic that your provider should enforce. Business logic includes handling of invalid values, financial or arithmetic calculations, elimination or combining of duplicates, and so forth. A content provider does not have to have business logic, because it may be implemented by activities that modify the data. If the provider does implement business logic, you should test it. 测试业务逻辑:不要忘记测试业务逻辑你的provider是可以实现的.业务逻辑包括处理无效的数据,财务或者算术的计算,消除或者联级复制,等等.一个content provider 不要有太多的业务逻辑,因为,这可能导致改变数据时部分业务逻辑被实现.如果你的provider实现了业务逻辑,你应该测试它. services Ensure that theonCreate()is called in response toContext.startService()orContext.bindService(). Similarly, you should ensure thatonDestroy()is called in response toContext.stopService(),Context.unbindService(),stopSelf(), orstopSelfResult(). 确定onCreate()方法是响应Context.startService() 或者Context.binServ()的调用.同样,你应该确定onDestoy()方法是响应Context.stopService(),Context.unbindService(),stopSelf(), orstopSelfResult(). 的调用 Test that your Service correctly handles multiple calls fromContext.startService(). Only the first call triggersService.onCreate(), but all calls trigger a call toService.onStartCommand(). In addition, remember thatstartService()calls don't nest, so a single call toContext.stopService()orService.stopSelf()(but notstopSelf(int)) will stop the Service. You should test that your Service stops at the correct point. 测试Service在Context.startService()的多次调用下正常运行.只有在第一次调用时触发Service.onCreate().但是,其它所有的调用都在Service.onStartCommand()触发.另外,记住startService()不支持嵌套调用!还有单独调用Context.stopService()或者Service.stopSelf()(但是不是stopSelf(int))将会停止Service.你应该测试你的Service在正确的点上停止. Test any business logic that your Service implements. Business logic includes checking for invalid values, financial and arithmetic calculations, and so forth. 测试Service实现的是所有业务逻辑.这些业务逻辑包括检查无效的值,财务和算术运算,等等 本文转自 liam2199 博客,原文链接:http://blog.51cto.com/youxilua/772686 如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册