修剪后的依赖树上的图卷积用于关系提取 此回购包含PyTorch代码,用于修剪。 本文/代码在修剪的依赖树上引入了图卷积神经网络(GCN),用于关系提取的任务。 还引入了一种特殊的树修剪技术,称为“以路径为中心的修剪”,以从树中消除不相关的信息,同时最大程度地维护相关信息。 与诸如各种基于LSTM的模型之类的序列模型相比,此GCN模型利用依赖结构桥接远程单词,因此提高了远程关系的性能。 与以前的递归模型(如TreeLSTM)相比,此GCN模型在获得更好的性能的同时,也更早地实现了并行化,因此效率更高。 参见下面的模型架构概述: 要求 Python 3(在3.6.5上测试) PyTorch(
1
《编写高质量代码:改善java程序的151个建议》一共12章,第1~3章针对java语法本身提出了51条建议,例如覆写变长方法时应该注意哪些事项、final修饰的常量不要在运行期修改、匿名类的构造函数特殊在什么地方等;第4~9章重点针对jdk api的使用提出了80条建议,例如字符串的拼接方法该如何选择、枚举使用时有哪些注意事项、出现nullpointerexception该如何处理、泛型的多重界限该如何使用、多线程编程如何预防死锁,等等;第10~12章针对程序性能、开源的工具和框架、编码风格和编程思想等方面提出了20条建议。 《编写高质量代码:改善java程序的151个建议》针对每个问题所设计的应用场景都非常典型,给出的建议也都与实践紧密结合。书中的每一条建议都可能在你的下一行代码、下一个应用或下一个项目中崭露头角,建议你将此书搁置在手边,随时查阅,一定能使你的学习和开发工作事半功倍。 《编写高质量代码:改善java程序的151个建议》 前 言 第1章 java开发中通用的方法和准则/1 建议1: 不要在常量和变量中出现易混淆的字母/2 建议2: 莫让常量蜕变成变量/2 建议3: 三元操作符的类型务必一致/3 建议4: 避免带有变长参数的方法重载/4 建议5: 别让null值和空值威胁到变长方法/6 建议6: 覆写变长方法也循规蹈矩/7 建议7: 警惕自增的陷阱/8 建议8: 不要让旧语法困扰你/10 建议9: 少用静态导入/11 建议10: 不要在本类中覆盖静态导入的变量和方法/13 建议11: 养成良好习惯,显式声明uid/14 建议12: 避免用序列化类在构造函数中为不变量赋值/17 建议13: 避免为final变量复杂赋值/19 建议14: 使用序列化类的私有方法巧妙解决部分属性持久化问题/20 建议15: break万万不可忘/23 建议16: 易变业务使用脚本语言编写/25 建议17: 慎用动态编译/27 .建议18: 避免instanceof非预期结果/29 建议19: 断言绝对不是鸡肋/31 建议20: 不要只替换一个类/33 第2章 基本类型/35 建议21: 用偶判断,不用奇判断/36 建议22: 用整数类型处理货币/37 建议23: 不要让类型默默转换/38 建议24: 边界,边界,还是边界/39 建议25: 不要让四舍五入亏了一方/41 建议26: 提防包装类型的null值/43 建议27: 谨慎包装类型的大小比较/45 建议28: 优先使用整型池/46 建议29: 优先选择基本类型/48 建议30: 不要随便设置随机种子/49 第3章 类、对象及方法/52 建议31: 在接口中不要存在实现代码/53 建议32: 静态变量一定要先声明后赋值/54 建议33: 不要覆写静态方法/55 建议34: 构造函数尽量简化/57 建议35: 避免在构造函数中初始化其他类/58 建议36: 使用构造代码块精炼程序/60 建议37: 构造代码块会想你所想/61 建议38: 使用静态内部类提高封装性/63 建议39: 使用匿名类的构造函数/65 建议40: 匿名类的构造函数很特殊/66 建议41: 让多重继承成为现实/68 建议42: 让工具类不可实例化/70 建议43: 避免对象的浅拷贝/71 建议44: 推荐使用序列化实现对象的拷贝/73 建议45: 覆写equals方法时不要识别不出自己/74 建议46: equals应该考虑null值情景/76 建议47: 在equals中使用getclass进行类型判断/77 建议48: 覆写equals方法必须覆写hashcode方法/78 建议49: 推荐覆写tostring方法/80 建议50: 使用package-info类为包服务/81 建议51: 不要主动进行垃圾回收/82 第4章 字符串/83 建议52: 推荐使用string直接量赋值/84 建议53: 注意方法中传递的参数要求/85 建议54: 正确使用string、stringbuffer、stringbuilder/86 建议55: 注意字符串的位置/87 建议56: 自由选择字符串拼接方法/88 建议57: 推荐在复杂字符串操作中使用正则表达式/90 建议58: 强烈建议使用utf编码/92 建议59: 对字符串排序持一种宽容的心态/94 第5章 数组和集合/97 建议60: 性能考虑,数组是首选/98 建议61: 若有必要,使用变长数组/99 建议62: 警惕数组的浅拷贝/100 建议63: 在明确的场景下,为集合指定初始容量/101 建议64: 多种最值算法,适时选择/104 建议65: 避开基本类型数组转换列表陷阱/105 建议66: aslist方法产生的list对象不可更改/107 建议67: 不同的列表选择不同的遍历方法/108 建议68: 频繁插入和删除时使用linkedlist/112 建议69: 列表相等只需关心元素数据/115 建议70:子列表只是原列表的一个视图/117 建议71: 推荐使用sublist处理局部列表/119 建议72: 生成子列表后不要再操作原列表/120 建议73: 使用comparator进行排序/122 建议74: 不推荐使用binarysearch对列表进行检索/125 建议75: 集合中的元素必须做到compareto和equals同步/127 建议76: 集合运算时使用更优雅的方式/129 建议77: 使用shuffle打乱列表/131 建议78: 减少hashmap中元素的数量/132 建议79: 集合中的哈希码不要重复/135 建议80: 多线程使用vector或hashtable/139 建议81: 非稳定排序推荐使用list/141 建议82: 由点及面,一叶知秋—集合大家族/143 第6章 枚举和注解/145 建议83: 推荐使用枚举定义常量/146 建议84: 使用构造函数协助描述枚举项/149 建议85: 小心switch带来的空值异常/150 建议86: 在switch的default代码块中增加assertionerror错误/152 建议87: 使用valueof前必须进行校验/152 建议88: 用枚举实现工厂方法模式更简洁/155 建议89: 枚举项的数量限制在64个以内/157 建议90: 小心注解继承/160 建议91: 枚举和注解结合使用威力更大/162 建议92: 注意@override不同版本的区别/164 第7章 泛型和反射/166 建议93: java的泛型是类型擦除的/167 建议94: 不能初始化泛型参数和数组/169 建议95: 强制声明泛型的实际类型/170 建议96: 不同的场景使用不同的泛型通配符/172 建议97: 警惕泛型是不能协变和逆变的/174 建议98: 建议采用的顺序是list[t]、list[?]、list[object]/176 建议99: 严格限定泛型类型采用多重界限/177 建议100: 数组的真实类型必须是泛型类型的子类型/179 建议101: 注意class类的特殊性/181 建议102: 适时选择getdeclared×××和get×××/181 建议103: 反射访问属性或方法时将accessible设置为true /182 建议104: 使用forname动态加载类文件/184 建议105: 动态加载不适合数组/186 建议106: 动态代理可以使代理模式更加灵活/188 建议107: 使用反射增加装饰模式的普适性/190 建议108: 反射让模板方法模式更强大/192 建议109: 不需要太多关注反射效率/194 第8章 异常/197 建议110: 提倡异常封装/198 建议111: 采用异常链传递异常/200 建议112: 受检异常尽可能转化为非受检异常/202 建议113: 不要在finally块中处理返回值/204 建议114: 不要在构造函数中抛出异常/207 建议115: 使用throwable获得栈信息/210 建议116: 异常只为异常服务/212 建议117: 多使用异常,把性能问题放一边/213 第9章 多线程和并发/215 建议118: 不推荐覆写start方法/216 建议119: 启动线程前stop方法是不可靠的/218 建议120: 不使用stop方法停止线程/220 建议121: 线程优先级只使用三个等级/224 建议122: 使用线程异常处理器提升系统可靠性/226 建议123: volatile不能保证数据同步/228 建议124: 异步运算考虑使用callable接口/232 建议125: 优先选择线程池/233 建议126: 适时选择不同的线程池来实现/237 建议127: lock与synchronized是不一样的/240 建议128: 预防线程死锁/245 建议129: 适当设置阻塞队列长度/250 建议130: 使用countdownlatch协调子线程/252 建议131: cyclicbarrier让多线程齐步走/254 第10章 性能和效率/256 建议132: 提升java性能的基本方法/257 建议133: 若非必要,不要克隆对象/259 建议134: 推荐使用“望闻问切”的方式诊断性能/261 建议135: 必须定义性能衡量标准/263 建议136: 枪打出头鸟—解决首要系统性能问题/264 建议137: 调整jvm参数以提升性能/266 建议138: 性能是个大“咕咚”/268 第11章 开源世界/271 建议139: 大胆采用开源工具/272 建议140: 推荐使用guava扩展工具包/273 建议141: apache扩展包/276 建议142: 推荐使用joda日期时间扩展包/280 建议143: 可以选择多种collections扩展/282 第12章 思想为源/285 建议144: 提倡良好的代码风格/286 建议145: 不要完全依靠单元测试来发现问题/287 建议146: 让注释正确、清晰、简洁/290 建议147: 让接口的职责保持单一/294 建议148: 增强类的可替换性/295 建议149: 依赖抽象而不是实现/298 建议150: 抛弃7条不良的编码习惯/299 建议151: 以技术员自律而不是工人/301
2022-09-27 13:11:58 14.81MB java 代码 pdf
1
优化神器 beamoff,OS X 10.10.5亲测可用,巨幅增加流畅度,其他版本系统也可以尝试使用。设为开机启动最好,win下安装vmvare虚拟机mac系统必备。解决macOS在VMware中卡顿的问题,提升macOS在VMware workstation中的性能。使用方法:把beamoff.zip 解压出来,拖放到苹果系统中,设置的自动启动运行就可以了。
2022-09-26 09:00:47 135KB beamoff 苹果虚拟机
1
增强植被指数(EVI)是一种“优化”指数,旨在通过取消冠层背景信号的耦合和减少大气影响来增强高生物量地区的植被信号,从而提高其敏感性,并改善植被监测。 EVI根据以下等式计算:EVI = G *(NIR-RED)/(NIR + C1 * RED-C2 * Blue * L) 其中NIR /红色/蓝色是经过大气校正或部分大气校正(瑞利和臭氧吸收)的表面反射率,L是冠层背景调整,用于解决通过冠层的非线性,差分NIR和红色辐射传输,C1,C2是气溶胶阻力项的系数,它使用蓝色带校正红色带中的气溶胶影响。 MODIS-EVI算法采用的系数为:L = 1,C1 = 6,C2 = 7.5,G(增益因子)= 2.5。 归一化植被指数(NDVI)对叶绿素敏感,而EVI对冠层结构变化(包括叶面积指数(LAI),冠层类型,植物相貌和冠层结构)更敏感。 这两种植被指数在全球植被研究中相辅相成,并且在检测植被
2022-09-22 13:00:54 292.32MB MATLAB
1
BP神经网络目前被广泛应用,但是其收敛速度慢、预测精度不高的缺点却一直被人所诟病,因此,在传统BP神经网络中使用附加动量项法以及动态学习速率法,并以两者的融合为基础提出了陡峭因子可调激活函数法来改进BP神经网络。以非线性函数拟合为实例,从收敛速度和预测精度两方面对比分析两种方法,实验证明所提出的改进方法明显提高BP神经网络的收敛速度以及精度。
2022-09-16 12:38:52 634KB BP神经网络
1
编写高质量代码改善C#程序的157个建议(源码+pdf)
2022-09-12 11:15:30 27.52MB 源码 pdf
1
改善败血症治疗策略 这是论文“使用深度强化学习和专家混合改善脓毒症治疗策略”的代码库 评论者评论 表1中的数据清楚地显示了数据集幸存者/非幸存者的失衡率。 学习不平衡会导致分类器的预测模型出现偏差。 但是,作者没有详细说明他们如何通过使用特定的重新平衡方法或对成本敏感的学习方法来解决此问题,但未提供任何评论。 数据集分为固定的75%训练和验证集和25%的测试集。“->作者应使用10倍交叉验证。 如表2所示,尽管他们的专家混合(MoE)方法的性能在数值上优于医师,内核和DQN的性能,但分析这种数值增加的显着性还是不错的。 随机策略会产生什么效果? 有没有一种方法可以衡量这些方法之间的性能差异的重要性? 本文未介绍其方法的任何时间性能。 训练这种方法需要多长时间? 这个培训时间对于为ICU患者制定个性化治疗策略是否可行? RL和Deep网络都因训练时间长而臭名昭著。 动机 败血症是IC
2022-08-16 14:27:18 478KB JupyterNotebook
1
1. 命名多长最合适 2. 利用上下文简化命名 3. 命名要可读、可搜索 4. 如何命名接口和抽象类 1. 注释到底该写什么 2. 注释是不是越多越好
2022-08-04 09:00:32 1.54MB 软件/插件
1
第1章 重构,第一个案例1 1.1 起点1 1.2 重构的第一步7 1.3 分解并重组statement()8 1.4 运用多态取代与价格相关的条件逻辑34 1.5 结语52 第2章 重构原则53 2.1 何谓重构53 2.2 为何重构55 2.3 何时重构57 2.4 怎么对经理说60 2.5 重构的难题62 2.6 重构与设计66 2.7 重构与性能69 2.8 重构起源何处71 第3章 代码的坏味道75 3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 3.7 FeatureEnvy(依恋情结)80 3.8 DataClumps(数据泥团)81 3.9 PrimitiveObsession(基本类型偏执)81 3.10 SwitchStatements(switch惊悚现身)82 3.11 ParallelInheritanceHierarchies(平行继承体系)83 3.12 LazyClass(冗赘类)83 3.13 SpeculativeGenerality(夸夸其谈未来性)83 3.14 TemporaryField(令人迷惑的暂时字段)84 3.15 MessageChains(过度耦合的消息链)84 3.16 MiddleMan(中间人)85 3.17 InappropriateIntimacy(狎昵关系)85 3.18 AlternativeClasseswithDifferentInterfaces(异曲同工的类)85 3.19 IncompleteLibraryClass(不完美的库类)86 3.20 DataClass(纯稚的数据类)86 3.21 RefusedBequest(被拒绝的遗赠)87 3.22 Comments(过多的注释)87 第4章 构筑测试体系89 4.1 自测试代码的价值89 4.2 JUnit测试框架91 4.3 添加更多测试97 第5章 重构列表103 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数109 6.1 ExtractMethod(提炼函数)110 6.2 InlineMethod(内联函数)117 6.3 InlineTemp(内联临时变量)119 6.4 ReplaceTempwithQuery(以查询取代临时变量)120 6.5 IntroduceExplainingVariable(引入解释性变量)124 6.6 SplitTemporaryVariable(分解临时变量)128 6.7 RemoveAssignmentstoParameters(移除对参数的赋值)131 6.8 ReplaceMethodwithMethodObject(以函数对象取代函数)135 6.9 SubstituteAlgorithm(替换算法)139 第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 RemoveMiddleMan(移除中间人)160 7.7 IntroduceForeignMethod(引入外加函数)162 7.8 IntroduceLocalExtension(引入本地扩展)164 第8章 重新组织数据169 8.1 SelfEncapsulateField(自封装字段)171 8.2 ReplaceDataValuewithObject(以对象取代数据值)175 8.3 ChangeValuetoReference(将值对象改为引用对象)179 8.4 ChangeReferencetoValue(将引用对象改为值对象)183 8.5 ReplaceArraywithObject(以对象取代数组)186 8.6 DuplicateObservedData(复制“被监视数据”)189 8.7 ChangeUnidirectionalAssociationtoBidirectional(将单向关联改为双向关联)197 8.8 ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向关联)200 8.9 ReplaceMagicNumberwithSymbolicConstant(以字面常量取代魔法数)204 8.10 EncapsulateField(封装字段)206 8.11 EncapsulateCollection(封装集合)208 8.12 ReplaceRecordwithDataClass(以数据类取代记录)217 8.13 ReplaceTypeCodewithClass(以类取代类型码)218 8.14 ReplaceTypeCodewithSubclasses(以子类取代类型码)223 8.15 ReplaceTypeCodewithState/Strategy(以State/Strategy取代类型码)227 8.16 ReplaceSubclasswithFields(以字段取代子类)232 第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 9.4 RemoveControlFlag(移除控制标记)245 9.5 ReplaceNestedConditionalwithGuardClauses(以卫语句取代嵌套条件表达式)250 9.6 ReplaceConditionalwithPolymorphism(以多态取代条件表达式)255 9.7 IntroduceNullObject(引入Null对象)260 9.8 IntroduceAssertion(引入断言)267 第10章 简化函数调用271 10.1 RenameMethod(函数改名)273 10.2 AddParameter(添加参数)275 10.3 RemoveParameter(移除参数)277 10.4 SeparateQueryfromModifier(将查询函数和修改函数分离)279 10.5 ParameterizeMethod(令函数携带参数)283 10.6 ReplaceParameterwithExplicitMethods(以明确函数取代参数)285 10.7 PreserveWholeObject(保持对象完整)288 10.8 ReplaceParameterwithMethods(以函数取代参数)292 10.9 IntroduceParameterObject(引入参数对象)295 10.10 RemoveSettingMethod(移除设值函数)300 10.11 HideMethod(隐藏函数)303 10.12 ReplaceConstructorwithFactoryMethod(以工厂函数取代构造函数)304 10.13 EncapsulateDowncast(封装向下转型)308 10.14 ReplaceErrorCodewithException(以异常取代错误码)310 10.15 ReplaceExceptionwithTest(以测试取代异常)315 第11章 处理概括关系319 11.1 PullUpField(字段上移)320 11.2 PullUpMethod(函数上移)322 11.3 PullUpConstructorBody(构造函数本体上移)325 11.4 PushDownMethod(函数下移)328 11.5 PushDownField(字段下移)329 11.6 ExtractSubclass(提炼子类)330 …… 第12章 大型重构359 第13章 重构,复用与现实379 第14章 重构工具401 第15章 总结409 参考书目413 要点列表417 索引419
2022-07-31 22:17:22 31MB java
1