Android学习笔记2 - 分析第一个应用

【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings 代码的含义是 解析依赖时 , 只能使用本脚本块中的 Maven 仓库 , 不能使用 Module 子项目中的依赖;以戳这里获取](https://bbs.youkuaiyun.com/topics/618545628)**在 dependencyResolutionManagement 脚本块 中 定义的。dependencyResolutionManagement 脚本块 ,pluginManagement 脚本块 , 阅读详情

Android学习笔记2 - 分析第一个应用

上一章已经创建了一个应用程序,这一节我们需要了解和分析下这个应用。

项目视图界面

在Android Studio中(后面简称AS,当然不是Flex的ActionScript,也是AS,:)),在左侧界面Project里默认是Android视图(如下图),这不是真正的目录结构,类似于VS的类视图一样,我们切换成Project视图就是目录结构了。在这里插入图片描述
在这里插入图片描述

我们对Project文件结构先找几个能理解的说明一下,其他的后面又机会再详细研究。

  • app目录最日后我们编写代码资源等都放在这里的。
  • build是编译时自动生成的。

我们重点先看看app目录。

  • build和外面的一样,也是编译时产生的。
  • libs用到的第三方jar包。
  • androidTest是用来编写测试用例的。
  • java存放java代码和Kotilin代码的地方。里面有一个MainActivity文件。
  • res存放图片drawable、布局layout、字符串values等资源。
  • AndroidManifest.xml是整个项目的配置文件,程序中定义的4大组件需要再这里注册,还有应用程序添加的权限声明。
  • test编写单元测试的。
  • build.gradle是app模块的gradle构建脚本,和项目相关的。
  • proguard-rules.pro代码的混淆规则。

从AndroidManifest.xml开始

我们看下程序的入口是哪里

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HelloWorld">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

在activity里我们看到.MainActivity就是主Activity,没有在这里注册的acivity是不能使用的。我们打开java里的MainActivity.kt代码。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

他继承自AppCompatActivity,所有的Activity都必须继承自他。
AS的设计讲究逻辑和视图分离,所以一般不在activity中编写界面。

布局Layout

第二行的setContentView(R.layout.activity_main)调用了一个布局方法,我们打开layout目录里面有activity_main.xml。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

布局看起来和HTML和CSS有点相似,有一个TextView组件,应该就是显示Hello的组件了。

引用values

android:text="@string/app_name"

上面这行代码,就是显示Hello World。我修改过,增加了@进行了引用string
我们打开values\strings.xml

<resources>
    <string name="app_name">HelloWorld!!!</string>
</resources>

在代码中引用values可以使用R.string.app_name,在xml中可以使用上面@的方法。

如果是引用图片可以把string替换成drawable。如果是引用应用图标mipmap,我们可以把string换成mipmap。

mipmap

在res目录下有很多的mipmap,目的是为了兼容各种设备,不同的设备会有不同的分辨率,这是最理想的情况,一般我们直接把图片放在drawable-xxhdpi下就可以了,这是主流的分辨率目录。(不知道其他的能不能删除掉?看着烦)

其他参数

应用的图标和应用名称是通过下面两行设定的。

	android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"

Build.gradle

AS是通过Gradle来构建项目的。他采用了给予Groovy的DSL语言来进行项目设置。
项目中有一个app里面的,一个外面的gradle文件。

最外层的setting.gradle

这个目前的版本和书中讲的是不一样的,可能版本更新了。书中说是build.gradle,但是我的项目里settings.gradle文件和书中的基本一致。

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "HelloWorld"
include ':app'

repositories 里 引用了google的扩展依赖库和jcenter的第三方开源库。

而在最外层的build.gradle里

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

引用的插件格式变为了上面的格式
id ‘name’ version ‘0.0’ apply false

这里是全局的配置,影响所有的子项目模块。

项目里app下的gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.helloworld"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

第一行 id ‘com.android.application’
表示是一个应用模块,如果是库就是com.android.library。
第二行 id ‘org.jetbrains.kotlin.android’
应该是使用Kotlin来开发Android必须的。

接下来android大括号里的
compileSdk 使用的编译版本

defaultConfig
  • applicationId 是唯一的ID
  • List item
  • minSdk 支持最低的版本21就是android 5.0
  • versionCode 版本号
  • versionName 版本名称
  • testInstrumentationRunner 用于JUnit测试。
buildTypes

用于指定生成安装文件的配置,一会只会有debug、release。

  • minifyEnabled 是否混淆
  • proguardFiles 混淆时使用的规则文件

proguard-android-optimize.txt是在/tools/proguard目录下。
proguard-rules.pro在app目录下的规则文件。

dependencies

这个是项目的所有依赖关系。通常分为3种依赖方式:本地依赖、库依赖、远程依赖。

  • 本地依赖对本地的jar包或者目录添加依赖关系。
  • 库依赖可以对项目种的库模块添加依赖关系。
  • 远程依赖可以对jcenter仓库上的开源项目添加依赖关系。

implementation是远程的依赖声明,前4个。项目在构建时会检查本地是否已经有这些库的缓存,如果没有会线自动下载。

日志工具

安卓的日志工具类是Log(android.util.Log),他又5个方法。

  • Log.v() - 用于打印最琐碎的,verbose级别,最低级。
  • Log.d() - 用于打印调试信息,debug级别。
  • Log.i() - 用于打印比较重要的数据,通常是你要看的,info级别。
  • Log.w() - 用于打印警告信息,可能又潜在风险需要修复。warn级别。
  • Log.e() - 用于打印错误信息,例如catch里,一般是严重错误,error级别。

我们来测试一下,我们编辑MainActivity.kt

package com.example.helloworld

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.v("test","日志v");
        Log.d("test","日志d");
        Log.i("test","日志i");
        Log.w("test","日志w");
        Log.e("test","日志e");
    }
}

我们Shift+F10运行,在Logcat视图里我们可以看到有Log输出了。
在这里插入图片描述
运行起来以后,Logcat里大量的信息刷屏,我们需要在第二个下拉框,选择com.example.helloworld项目,这样只会看到本项目的信息了,在第四个下来框我输入了刚才我们的tag,可以过滤出含有test关键字的。第三个下来框是过滤重要信息的,如果选择了Verbose就是所有信息,如果选择到Info,只会看Info及以上等级的日志了。

在这里插入图片描述

很多Java新手会使用system.out.println()来打印日志,在Kotlin种对应的是println方法,日志开关不可控,所以滥用会被骂的。

最后的下拉框是过滤器,默认是Show only select application
这里我们可以自定义过滤器,我刚才在搜索框里输入的test只能过滤含有test关键字的,如果程序里还有大量的其他test单词组合的也是无法过滤掉的。那么自定义过滤器可以设定tag,等级其他信息。
在这里插入图片描述

我们选择了test过滤器,看看是不是很方便,工作中规范使用Log,给调试会带来很多方便之处。

在这里插入图片描述

本章到这里了,我们基本了解了项目大致文件目录分类和作用。
下一章我会大概记录下Kotlin语法和其他语法差异之处。

参考
《第一行代码》Android第三版

【Android】2、编写第一个安卓app——HelloWorld 本篇介绍如何编写第一个安卓app——HelloWorld 阅读详情

相关推荐

Android studio2024的第一个安卓项目

解决方法:首先查看连接的设备查看是否使用了自定义布局查看安装的包使用构建 Android 应用调试版本的命令我是用构建时发现了问题:Java compiler version 23 has deprecated support for compiling with source/target version 8.(即java版本为23,不适用于目标版本8)璀﹀憡: [options] 婧愬€?8 宸茶繃鏃讹紝灏嗗湪鏈潵鍙戣鐗堜腑鍒犻櫎璀﹀憡: [options] 鐩爣鍊?

m0_69115733的博客 1860

Android Gradle 7.1+新版本依赖变化

前一段时间由于工作需要把可爱的小雪狐舍弃了,找到了小蜜蜂。但是新版本的小蜜蜂出现了很多和旧版本不一样的位置。 1.功能位置迁移,原来在工程build.gradle的buildscript和allprojects移动至setting.gradle并改名为pluginManagement 和dependencyResolutionManagement。里面的东西依旧可以按照原来的copy过来。 pluginManagement { repositories { gradlePluginP

Lespayne的博客 2万+

【Qt for Android】第一个安卓程序

1)首先需要去官网上下载 Qt for android 版本的 Qt SDK 2)下载 android 相关的 SDK,下载地址不用找了,在Qt Creator工具选项的Android配置中有相应的下载链接地址。 3)下载完安卓SDK后,在上面的配置界面中指定相应SDK的目录,然后在"Build & Run"中新增Android的Kits

业精于勤荒于嬉,行成于思毁于随 3781

Android——Gradle插件项目根目录settings.gradle和build.gradle

一、settings.gradle 构建脚本分析1、Maven 远程仓库配置2、目录配置3、完整代码示例二、根目录下 build.gradle 构建脚本分析_android settings.gradle。settings.gradle 文件对应的gradle api中Settings对象实例,其api如下。settings.gradle文件配置项,实际上及时调用该api中的方法和属性。对应之前的 allprojects 中的 repositories 配置;3)、构建脚本的依赖可能是gradle插件。

8366

安卓App开发 篇一:从零开始构建第一个Android应用

Kotlin不仅减少了代码量,提高了代码的可读性和安全性,还借助于Google的全力支持,形成了日益壮大的开发者社区和完善的生态系统,是现代Android项目开发的首选语言。在首次运行时,会进入Android Studio Setup Wizard,将会验证当前的Android SDK和开发环境设置,并可以选择下载一个全新的Android SDK或使用一个已经安装的Android SDK。是Android应用的核心配置文件,它包含了应用的关键信息和元数据,以及应用中所有组件的声明。

生活在别处 2793

安卓逆向入门实战学习笔记

安卓逆向工程是指通过对APK安装包的反编译、代码分析与逻辑还原,理解其内部实现机制的过程。它广泛应用于安全审计、漏洞挖掘、竞品分析以及恶意代码研究等领域。与正向开发不同,逆向工程通常在没有源码的情况下进行,依赖于对字节码、资源文件和运行时行为的深入分析。安卓平台由于其开放性和碎片化特性,带来了诸如DEX文件结构复杂、多层运行时环境(Dalvik/ART)、签名机制与权限控制等独特挑战。掌握逆向技能,有助于深入理解Android系统机制,并提升应用安全性与攻防能力。

weixin_29138345的博客 1758

Android手把手,发布开源组件至 MavenCentral仓库

有时候,在我们写了一个组件想将之开源给更多人分享和使用时,就需要我们发布开源组件到公开的远程仓库,如 Jitpack、JenCenter 、 MavenCentral。其中,MavenCentral 是最流行的中央仓库,也是 Gradle 默认使用的仓库之一。这篇文章就介绍如何将自己的开源组件发布到MavenCentral仓库中;

许进进的博客 4477

从零到一:手把手教你用HFSS仿真60GHz圆极化磁电偶极子天线(附参数调优心得)

本文详细介绍了在HFSS中设计60GHz圆极化磁电偶极子天线的全流程,包括仿真环境搭建、参数化建模、收敛性优化和性能验证。通过系统化的参数扫描和优化策略,显著提升了天线的轴比带宽和增益性能,为毫米波通信应用提供了高效的天线设计解决方案。

weixin_42614269的博客 310

开启Android学习之旅-1

Android系统学习1

一根火柴博客 2167

DeepSeek安装教程

两分钟讲述deepseek正确安装教程

weixin_45906703的博客 1662

[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列

对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。

weixin_55035144的博客 1425

Android:日常学习笔记(2)——分析第一个Android应用程序

Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析    说明:   除了APP目录外,其他目录都是自动生成的。APP目录的下的内容才是我们的工作重点。 APP目录结构分析    项目如何运行 程序默认运行效果    说明:   程序的默认运行效果...

weixin_30660027的博客 185

Unity类银河战士恶魔城学习总结(P162 Improve skeleton提升敌人的效果)

为敌人添加了快慢刀

suzh1qian的博客 572

如何用Qt写一个安卓Android应用

至此环境就搭建好了,宝子们就可以掏出你Android系统的手坤用数据线连接电脑了,然后打开你手机的设置,找到关于本机,再然后连点几下版本号让手机处于开发者模式 ,在开发者选项中打开USB调试就OK啦。这里就可以绑定SDJ,NDK,JDK的路径了,JDK的路径会自动绑定你下载的,如果不是也很好找,一般就在C:\program Files(x86)\Java这个目录下。中间会让你选择安装目录,选择安装到你空间比较充足的地方就好了,比较简单就不放图了。

qq_59840326的博客 1万+

从收音机到Arduino:手把手教你用BJT三极管搭建一个简易音频放大器(附电路图与元件清单)

本文详细介绍了如何使用BJT三极管搭建简易音频放大器,涵盖电路原理、元件选择、设计步骤及调试技巧。通过实践项目帮助电子爱好者深入理解BJT的放大特性,并提供与Arduino结合的扩展应用方案,适合创客和DIY玩家。

aitie1479的博客 437

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2256

开发自己的第一个安卓app

开发自己的第一个安卓app 在开发安卓app的时候,首先我们需要配置一下电脑的开发环境。到jdk官网下载最新版本的jdk安装包。 Window64位下载地址:http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe 下载完成后,全部默认安装,一直点击下一步知道完成。在安装的过程中

tongyong128的专栏 8万+

ABB机器人刷功能选项全一篇就够——不怕丢失程序和IO配置数据

ABB机器人刷功能选项

m0_66701835的博客 1258

Android快速入门 基础知识,系统架构(快速开发第一个安卓应用程序),最新Android面试合集

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。资源持续更新中,欢迎大家一起学习和探讨。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

2401_84149496的博客 1285

【Claude】Invalid model / Opus not available 错误:模型不可用的原因 bug报错已解决

使用 Claude API 时,指定错误或不可用的模型 ID 会收到 Invalid model 错误。本文从模型命名规则出发,给出模型降级链与动态选择方案。

博客 7913

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android Studio学习01:第一个安卓应用

简介:jdk安装;Android Studio安装;Android Studio创建第一个项目;安卓开发入门;学习使用Textview、Imageview、LinearLayout。

junqiduhang的博客 571

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

安卓逆向学习笔记(一)

这些都是通过学长给予,以及网络上的资源来做的个人理解、总结,大牛们不要喷。 零基础小萌新在角落瑟瑟发抖的认真记笔记。 安卓逆向学习笔记(一) 写一个安卓程序(附上原帖链接教我兄弟学Android逆向01) 安装所需软件android studio,因为貌似被墙了所以没有用官网下载。 官网下载链接及教程,链接官网下载链接,教程安装及下载教程 网上另找的资源(内附教程)android studi...

qq_43593334的博客 1707

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

安卓开发第一个apk

关于Android studio的安装配置,Android SDK build tools的安装配置,gradle的安装配置,gradle plugins的介绍

人工智能-机器学习-研究学习APP 4768

在Android Studio上编写第一个安卓程序

安卓的第一个程序

qq_42242452的博客 2251

Android入门开发-第一个安卓应用HelloWorld(模拟器和手机上运行)

Android入门开发-第一个安卓应用HelloWo android studio下载安装教程,详见文末。 现在android studio后,下面我们开始第一个安卓应用。 第一步,打开android studio软件,依次点击File–>new–>new project,进入如图界面,该界面第一栏为应用名称,自己命名,后面的几栏分别是公司域名和保存路径,可以不用改动。点击next。 ...

nuist_NJUPT的博客 4095
上一篇: Unity 使用StateMachineBehaviour让动画控制器状态自动关闭跳出
下一篇: Android学习笔记3 - Kotlin语法学习
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值