首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

简单模型轻量化方法:20行代码BERT剪枝

目前业界上主要轻量化方法如下: 蒸馏:将大模型蒸馏至小模型,思路是先训练好一个大模型,输入原始数据得到logits作为小模型soft label,而原始数据标签则为hard label,使用soft...我们团队对这些轻量化方法都进行了尝试,简单总结如下: 蒸馏:可以很好地将大模型能力教给小模型,将12层BERT蒸馏至2层BERT,可以达到非常接近效果。但这种方法需要先训练出一个大模型。...这些工具都不适合使用,那就让我们自己来动手剪枝吧: 简单方法:直接改配置文件参数设置,不加载谷歌pretrain好语言模型,使用自己数据重新pretrain语言模型,再加载该模型进行task-specific...终极方法:在pretrain阶段,取通用BERT模型前n维参数进行赋值再train一遍;在fine-tune阶段,就可以直接加载train好模型进行微调。 下面进入了超级简单代码环节!...取前n维向量剪枝方法是否过于粗暴?是有点,我们也简单尝试过,对权重根据绝对值进行排序裁剪,但结果相差不大。

6.8K10

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

, 如果设置了 , 则执行被用户设置 触摸监听器 OnTouchListener ; 如果用户设置 触摸监听器 OnTouchListener 触摸方法返回 true , 此时该分发方法返回值就是...// 如果用户设置 触摸监听器 OnTouchListener 触摸方法返回 true // 此时该分发方法返回值就是 true result...= true; } } } 如果上述 li.mOnTouchListener.onTouch(this, event) 执行触摸监听器触摸方法返回值 true , 则不会调用...View 组件自己 onTouchEvent 方法了 , 在 onTouchEvent 方法中会调用 点击监听器方法 ; 如果用户 触摸监听器 OnTouchListener 返回 true...result && onTouchEvent(event)) { result = true; } } } 方法一 : 简单方法是 让 触摸事件

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

Android触摸事件传递(上)

我们上代码验证,我们先写一个简单Activity, ? 很简单布局文件 ? 很简单按钮点击      此时我们运行程序,点击按钮,控制台会打印 “btn clicked!” 日志,一切正常。...这里分三步,第一步,如果是触摸开始类型ACTION_DOWN事件,会回调onUserInteraction()方法,所以在项目中可以考虑将一些需要用户开始触摸时就执行代码放到此方法中;第二步,将触摸事件...下面我们将onTouchListener返回值改为false,并重写EventBtn onTouchEvent方法,并返回true。 ?    运行App,点击按钮,查看打印日志, ?    ...这也验证了我们关于View触摸事件传递第二部分,触摸事件ev优先被onTouchListener消费,然后再让传递给onTouchEvent消费。    ...现在我们通过代码验证我们关于View触摸事件传递机制结论,为了进一步佐证我们结论,我们还得去查看View框架源码,我们打开View源码,找到dispatchTouchEvent方法, ?

1.1K30

Android 中 View 手势事件处理

: 首先,View 代码中已经给我们写了一个 onTouchEvent 方法用于处理直接触摸事件,我们可以在官方文档中看到对这个方法介绍: public boolean onTouchEvent...接下来介绍一个配合这个方法使用类:VelocityTracker(速度追踪类),这个类用于获取触摸移动时候速度,一般来说,我们会在 onTouchEvent 中使用这个类,先看看官方文档说明:...也就是说这个 View OnTouchEvent方法对于当前触摸事件(在这一次触摸事件手指松开之前)已经失效了 */ return true; } } 这个自定义控件只能在代码中新建...,不能再布局文件中使用,因为我们只写了一个构造方法,并且这里我们利用 GetInfFromMotionEvent 接口将得到触摸信息传递出去,接下就是MainActivity.java: import...所以说 OnTouchListener 接口和 View 中自带 onTouchEvent 方法是不能同时使用。有兴趣小伙伴可以自己去试验一下。Ok,这个问题就解决了。

1.4K20

手把手教你读懂源码,ViewTouch事件传递流程详细剖析

2、ViewGroupdispatchTouchEvent 如果要很好掌握Touch事件处理,这部分要重点学习,而且不同Android版本实现不一致,本文仍然使用最新Android 7.1...如果event空,则将动作设为ACTION_CANCEL,接着用一个for循环不断向下传递触摸事件,然后再清除所有触摸目标,最后在回收拷贝对象。...从开始到这里,我们大概分析了一下事件分发流程,通过调用ActivitydispatchTouchEvent方法,事件会首先被派发到顶级DecorView也就是ViewGroup,再由ViewGroup...OnTouchListener监听器 当前View一旦执行了setOnTouchListener方法,该ViewmOnTouchListener就不为空,就会调用OnTouchListener...Android事件分发机制全图 这一块内容详细分析确实比较麻烦,但是整体疏通以后看起来大体还算比较简单。如果有疑问,欢迎留言一起相互探讨共同进步。

75070

谷歌地图与 NestedScrollView 滑动冲突

某天,项目收尾时,愕然发现在某页 Google Map 与当前页面滑动冲突,直接表现结果便是,手指触摸地图进行滑动时,地图视觉卡顿且页面会随着手指滑动而滑动,顿时很蛋疼,脑海第一想法事件分发,拦截丫不就好了吗...,直接触摸地图时候,父容器别管我不就好了。...首先,重写 SupportMapFragment ,这里主要通过 dispatchTouchEvent 进行事件分发,也可以简单理解在这里我们去控制地图与父容器之间事件传递。...listener) { mListener = listener; } public interface OnTouchListener { public..." android:layout_width="match_parent" android:layout_height="match_parent" /> 最后,实例化地图同时告诉父容器

1.2K20

Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

; ② 触摸监听器 : 自定义组件实现 OnTouchListener 触摸监听器 , 并重写 onTouch 方法 ; ③ 创建手势识别对象 : 创建 GestureDetector 对象 , 传入本组件作为手势监听器...; mGestureDetector = new GestureDetector(context, this); ④ 组件设置触摸监听器 : 本自定义组件设置触摸监听器 ; setOnTouchListener...触摸事件传递给 GestureDetector : 在 View.OnTouchListener 触摸监听器 onTouch 触摸回调方法中 , 将触摸事件传递给 mGestureDetector 处理...触摸滑动操作 : ① onScroll 方法 : 触摸滑动主要在 GestureDetector.OnGestureListener 监听器中 onScroll 方法中实现 , 该方法触摸滑动事件...0 , 对应图片也向下滑动 , 解码区域 top 和 bottom 增加 ; ③ 解码区域限制 : 解码底部不能超过图片高度 , 解码顶部不能小于 0 ; 分别针对这两种情况进行各种限制

1.5K22

View,ViewGroupTouch事件分发机制

ViewGroup事件分发机制 我们用手指去触摸Android手机屏幕,就会产生一个触摸事件,但是这个触摸事件在底层是怎么分发呢?...一个final内部类并且继承FrameLayout,也是Window界面的顶层View对象,这是什么意思呢?...enabled,除非你手动设置disabled 第三个条件就是OnTouchListener接口onTouch()方法返回值了,如果调用了setTouchListener()设置OnTouchListener...()值 现在你了解了ViewonTouchEvent()方法和onTouch()关系了吧,为什么Android提供了处理Touch事件onTouchEvent()方法还要增加一个OnTouchListener...事件是从顶层View一直分发到手指touch里层View,如果里层View消费了ACTION_DOWN事件(设置onTouchListener,并且onTouch()返回true 或者onTouchEvent

1.1K70

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)「建议收藏」

public void onClick(View v) { Log.i(null, "OnClickListener--onClick--"+v); } } 到此基础示例代码编写完成...也就是说当点击View时事件派发每一个down,upaction顺序是先触发父级控件(这里LinearLayout)dispatchTouchEvent->onInterceptTouchEvent...3-1 从ViewGroupdispatchTouchEvent方法说起 前一篇3-2小节说在Android中你只要触摸控件首先都会触发控件dispatchTouchEvent方法(其实这个方法一般都没在具体控件类中...在dispatchTouchEvent(MotionEvent ev)这段代码使用变量intercepted来标记ViewGroup是否拦截Touch事件传递,该变量类似第一步mFirstTouchTarget...具体总结如下: Android事件派发是先传递到顶级ViewGroup,再由ViewGroup递归传递到View

34420

图片画画板

页面布局,相对布局 按钮位于父窗体下方使用android:layout_alignParentBottom=”true” 图片位于按钮上方,填充父窗体,使用android:layout_above=...,参数:Color.WHITE白色 调用ImageView对象setOnTouchListener()方法,参数:OnTouchListener对象,这个类是一个接口类型,因此直接new它创建匿名内部类实现方法...onTouch() 在onTouch(View v,MotionEvent event)方法里面 参数:View对象是被触摸对象,MotionEvent对象是触摸事件对象 调用MotionEvent对象...getAction()方法,获取触摸事件 switch判断这个事件 事件MotionEvent.ACTION_DOWN是手指第一次触摸屏幕 事件MotionEvent.ACTION_MOVE是手指在屏幕上移动...事件MotionEvent.ACTION_UP是手指离开屏幕 当手指触摸屏幕时 定义手指开始位置坐标startX startY 调用MotionEvent对象getX() 和 getY()方法

87070

android view事件分发机制_android事件分发流程图

3-2 从ViewdispatchTouchEvent方法说起 在Android中你只要触摸控件首先都会触发控件dispatchTouchEvent方法(其实这个方法一般都没在具体控件类中,而在他父类...4-2-2 简单修改onTouchEvent返回值true 将TestButton类onTouchEvent方法修改如下,其他和基础代码保持不变: @Override public boolean...4-2-3 简单修改onTouchEvent返回值false 将TestButton类onTouchEvent方法修改如下,其他和基础代码保持不变: @Override public boolean...4-2-5 简单修改dispatchTouchEvent返回值false 将TestButton类dispatchTouchEvent方法修改如下,其他和基础代码保持不变: @Override...综合得出Android View触摸屏事件传递机制有如下特征: 触摸控件(View)首先执行dispatchTouchEvent方法

61520

Android触摸事件传递(下)

上一篇中,我说明了Android中Activity和View触摸事件传递流程,现在我们来继续学习MotionEvent在View容器ViewGroup中传递过程。  ...很明显,我们按钮触摸事件和它父容器触摸事件,都触发了,这是因为,我们EventBtnonTouchListener方法和onTouchEvent方法都返回false,没有消费触摸事件,事件会向上继续传递...为了搞清楚上面的问题,我们继续来到ViewdispatchTouchEvent方法中,我们看到下面的一段代码 ?    ...同样,我们可以利用代码来验证我们上面的结论,我们打开EventBtn类中dispatchTouchEvent方法日志打印代码,同时我们将btn3onTouchListener方法返回true,消费掉触摸事件...关于Android中ViewGroup触摸事件传递就介绍到这里,难免很多地方有错误纰漏,但是我能够坚持把这些写出来,我觉得我已经有一点小小提高了,很开心~~

1K10

Android基础_事件分发源码走读

一、带着问题出发 我们手触摸点击屏幕时候,触摸、点击事件是如何分发呢? 布局中控件是如何获取到按键事件呢?...二、说在前面 下面来大体说下事件分发涉及到几个类和相关方法Android事件分发顺序是:Activity ----> ViewGroup ----> View 涉及到几个重要方法...intercept 值true,则进行事件拦截,执行是super.dispatchTouchEvent(event),也就是ViewdispatchTouchEvent(ev)方法,这个下面会分析...intercept 值false,则会遍历ViewGroup子view,如果是处于子View触摸区域,则会调用子viewdispatchTouchEvent(); 五、View事件分发机制...六、最后总结 通过上面简单代码跟读,我们知道点击Activity时,点击事件最先传递到Activity.java dispatchTouchEvent()中进行分发,dispatchTouchEvent

55120

Android开发笔记(一百零一)滑出式菜单

具体到LinearLayout编码实现,对应便是LinearLayout.LayoutParamsleftMargin参数,若该参数正数,则视图页面拉出了一段空白;若该参数负数,则视图页面隐藏了一段内容...所以我们可以给视图添加触摸监听器OnTouchListener,在触摸坐标发生变化同时,给菜单子页面隐入隐出对应宽度,从而达到抽屉式拉出菜单效果。...下面是一个简单侧滑代码例子: import com.example.exmslidingmenu.util.MetricsUtil; import android.annotation.SuppressLint...setModeLEFT_RIGHT时使用。 setSecondaryShadowDrawable : 设置第二个菜单背景图像。setModeLEFT_RIGHT时使用。...下面是SlidingMenuActivity主页面代码示例: import android.os.Bundle; import android.support.v4.app.Fragment; import

1.1K70

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 七 )

; ViewGroup | dispatchTransformedTouchEvent 方法中 , 传入子组件空 , 表示事件被拦截了 , 或消费不成功 , 此时需要消费自己触摸事件 , 调用父类..., 会调用 View OnTouchListener 方法 , OnTouchListener 是在 View ListenerInfo mListenerInfo 成员中 OnTouchListener...// 如果用户设置 触摸监听器 OnTouchListener 触摸方法返回 true // 此时该分发方法返回值就是 true result...// 如果用户设置 触摸监听器 OnTouchListener 触摸方法返回 true // 此时该分发方法返回值就是 true result...View 组件自己 onTouchEvent 方法 // 因此 , 如果用户 触摸监听器 OnTouchListener 返回 true // 则 用户 点击监听器 OnClickListener

1.2K20

当你触摸屏幕时手机都干了什么?你必须知道Android事件传递

前言 在Android开发中,Android事件传递可谓比较重要,是一块比较重要知识体系,不管是日常开发还是面试中熟悉整套传递机制都尤为重要,Android 事件传递 其实是Android输入子系统一部分...,主要表达APP端接收并传递由IMS捕获到输入事件流程,例如 按键Key事件、触摸touch事件等 image.png Android输入子系统到APP端事件传递 作为一个Android研发来说,SystemServer...()方法中实例化 ViewRootImpl setView()比较重要,他接收DecorView实例引用,并进行各种InputStage实例化,代码简化后如下 public void setView...最终会调用到输入焦点3个方法使用setKeyListener注册监听器onKey,之后是onKeyDown和onKeyUp,或者调用activityonKeyDown和onKeyUp方法,也就是兜底处理无人处理...则认为是一个点击事件 走OnClick 总结 Android事件由IMS负责捕获,例如触摸、按键、鼠标等事件,捕获到事件后WMS配合判断当前应该分发给哪个Window SystemServer与APP端事件传递通过

2.2K156

Android Studio 知识储备 之 ✨-基础知识学习历程

存放补间动画XML文件 2.如何使用这些资源 我们所有的资源文件都会在R.java文件下生成一个资源id,我们可以通过这个资源id来完成资源访问,使用情况有两种:Java代码使用和XML代码使用...因为外部类不能直接访问用户界面 类中组件,要通过构造方法将组件传入使用;这样导致结果就是代码不够简洁!...2.Android回调事件处理机制详解: 在Android中基于回调事件处理机制使用场景有两个: 1)自定义view 常见View组件回调 androidGUI组件提供了一些事件处理回调方法...简单流程大概是这样: 当我们一个手指触摸屏幕 ——> 触发ACTION_DOWN事件 接着有另一个手指也触摸屏幕 ——> 触发ACTION_POINTER_DOWN事件,如果还有其他手指触摸,继续触发...我们通过几十行代码就可以完成 我们异步操作,而且进度可控;相比起Handler,AsyncTask显得更加简单,快捷~当然,这只适合 简单异步操作,另外,实际异步用最多地方就是网络操作,图片加载

61830
领券