首页 文章 精选 留言 我的

精选列表

搜索[副语言],共10000篇文章
优秀的个人博客,低调大师

自然语言处理多任务学习目标

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 在之前的博文中,我讨论了如何利用相关任务提高多任务学习(MTL)模型的性能。在此之前,我们需要了解一下到底什么是多任务学习。 多任务学习是和单任务学习相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,而多任务学习是一种联合学习,多个任务并行学习,结果相互影响。简单来说,就是同时求解多个问题。例如我们经常探讨的“千人千面”这种个性化问题,就是一种典型的多任务学习问题,它可以同时学习多个用户的兴趣偏好。 多任务学习(MTL)主要是由两个部分组成:a)用于任务学习的架构、b)训练相关的辅助任务。而且这两个方面仍有很大的改进空间。此外,多任务学习有可能成为从有限数据中训练更强大的模型的关键技术:训练得到的模型可以执行更广泛的NLP任

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

JAVA调用C语言写的SO文件

因为 工作需要写一份SO文件,作为 手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 1 // 用JNI实现 2 // 实例: 3 4 // 创建HelloWorld.java 5 class HelloWorld 6 { 7 private native void print(); 8 public static void main(String[] args) 9 { 10 new HelloWorld().print(); 11 } 12 13 static 14 { 15 System.loadLibrary("HelloWorld"); 16 } 17 } 18 // 注意print方法的声明,关键字native表明该方法是一个原生代码实现的。另外注意static代码段的System.loadLibrary调用,这段代码表示在程序加载的时候,自动加载libHelloWorld.so库。 19 // 编译HelloWorld.java 20 // 在命令行中运行如下命令: 21 javac HelloWorld.java 22 // 在当前文件夹编译生成HelloWorld.class。 23 // 生成HelloWorld.h 24 // 在命令行中运行如下命令: 25 javah -jni HelloWorld 26 // 在当前文件夹中会生成HelloWorld.h。打开HelloWorld.h将会发现如下代码: 27 /* DO NOT EDIT THIS FILE - it is machine generated */ 28 #include <jni.h> 29 /* Header for class HelloWorld */ 30 31 #ifndef _Included_HelloWorld 32 #define _Included_HelloWorld 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 /* 37 * Class: HelloWorld 38 * Method: print 39 * Signature: ()V 40 */ 41 JNIEXPORT void JNICALL Java_HelloWorld_print 42 (JNIEnv *, jobject); 43 44 #ifdef __cplusplus 45 } 46 #endif 47 #endif 48 // 该文件中包含了一个函数Java_HelloWorld_print的声明。这里面包含两个参数,非常重要,后面讲实现的时候会讲到。 49 // 实现HelloWorld.c 50 // 创建HelloWorld.c文件输入如下的代码: 51 #include <jni.h> 52 #include <stdio.h> 53 #include "HelloWorld.h" 54 55 JNIEXPORT void JNICALL 56 Java_HelloWorld_print(JNIEnv *env, jobject obj) 57 { 58 printf("Hello World!\n"); 59 } 60 // 注意必须要包含jni.h头文件,该文件中定义了JNI用到的各种类型,宏定义等。 61 // 另外需要注意Java_HelloWorld_print的两个参数,本例比较简单,不需要用到这两个参数。但是这两个参数在JNI中非常重要。 62 // env代表 java虚拟机环境,Java传过来的参数和c有很大的不同,需要调用JVM提供的接口来转换成C类型的,就是通过调用env方法来完成转换的。 63 // obj代表调用的对象,相当于c++的this。当c函数需要改变调用对象成员变量时,可以通过操作这个对象来完成。 64 // 编译生成libHelloWorld.so 65 // 在 Linux下执行如下命令来完成编译工作: 66 cc -I/usr/lib/jvm/java-6-sun/include/linux/ 67 -I/usr/lib/jvm/java-6-sun/include/ 68 -fPIC -shared -o libHelloWorld.so HelloWorld.c 69 // 在当前目录生成libHelloWorld.so。注意一定需要包含Java的include目录(请根据自己系统环境设定),因为Helloworld.c中包含了jni.h。 70 // 另外一个值得注意的是在HelloWorld.java中我们LoadLibrary方法加载的是“HelloWorld”,可我们生成的Library却是libHelloWorld。这是Linux的链接规定的,一个库的必须要是:lib+库名+.so。链接的时候只需要提供库名就可以了。 71 // 运行Java程序HelloWorld 72 // 大功告成最后一步,验证前面的成果的时刻到了: 73 java HelloWorld 74 // 如果你这步发生问题,如果这步你收到java.lang.UnsatisfiedLinkError异常,可以通过如下方式指明共享库的路径: 75 java -Djava.library.path='.' HelloWorld 76 // 当然还有其他的方式可以指明路径请参考《在Linux平台下使用JNI》。 77 // 我们可以看到久违的“Hello world!”输出了。 试着去完成,自己生成了一份com_test_GetMsg.h头文件,并完成test.c,生成libtest.so文件,JAVA调用SO文件时,屡次报: failed: Cannot load library: load_library(linker.cpp:761): not a valid ELF executable: /data/app-lib/com.example.iccommtest-libtest.so 也就是提供的SO无法load,是valid的。 注意,刚才引用的实例是JAVA调用SO,而我需要的是android调用SO,不然会频繁上面错误。 原因有两点: 1、JAVA和android的虚拟环境不一样 2、Linux和android的系统库文件不一样 这样导致了在Linux下通过JNI标准命名方式编译的SO文件,在android是调用失败的,原因是Linux和android的系统库不一样,而生产的SO跟生产环境库文件有依赖关系,然后搭建了NDK和Cywin环境,然后生产的SO可以被android调用, 那么SO文件就必须完全遵循JNI命名规则,方法名是这样: /* * Class: com_samples_jni_test * Method: GetMsg * Signature: ()V */ JNIEXPORT jstring JNICALL Java_com_samples_jni_test_GetMsg (JNIEnv *, jobject); 通过NDK和Cywin生产libtest.so,android调用成功! 最新内容请见作者的GitHub页:http://qaseven.github.io/

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

WebStorm

WebStorm

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

用户登录
用户注册