混淆后的代码报错如何定位问题

Ruby报错“unexpected keyword_end“?代码块嵌套的调试技巧 Ruby开发中"unexpected keyword_end"错误常见于代码块嵌套不当或结构不完整。本文总结了9类典型场景:缩进不匹配、嵌套结构未闭合、哈希与代码块混淆等,并提供了命令行诊断工具(ruby -w)、IDE调试功能和静态分析工具(RuboCop)等解决方案。通过12个实战案例和预防性开发实践(规范缩进、CI集成、测试策略),可有效减少90%以上此类错误。建议开发者建立系统化调试思维,从基础检查到架构设计多维度预防此类语法问题。 阅读详情
AI摘要

本文介绍如何利用ProGuard生成的映射文件,通过retrace工具还原混淆后的堆栈跟踪,定位和解决代码问题。涵盖混淆映射文件生成、堆栈跟踪捕获及还原、ProGuard规则检查等关键步骤。

混淆后的代码报错定位问题可以通过以下步骤进行,主要依赖于ProGuard(或R8)生成的映射文件(mapping file)来将混淆后的代码还原成原始代码,以便调试和解决问题。

1. 启用混淆映射文件生成

确保在ProGuard配置文件中启用了混淆映射文件的生成:

-printmapping mapping.txt

这会在混淆过程完成后生成一个名为mapping.txt的文件,该文件记录了混淆前后类名、方法名、字段名的对应关系。

2. 捕获混淆后的堆栈跟踪

当应用在混淆后运行时遇到错误,会生成堆栈跟踪(stack trace),其中包含混淆后的类名和方法名。你需要捕获这个堆栈跟踪信息。

3. 使用映射文件还原堆栈跟踪

使用ProGuard提供的工具将混淆后的堆栈跟踪还原为可读的原始代码位置。以下是具体步骤:

3.1 使用retrace工具

ProGuard附带了一个名为retrace的工具,可以将混淆后的堆栈跟踪还原为原始代码。你可以在命令行中使用retrace工具。

3.2 执行retrace命令

假设你有一个混淆后的堆栈跟踪文件obfuscated_stacktrace.txt和混淆映射文件mapping.txt,可以使用以下命令进行还原:

retrace -verbose mapping.txt obfuscated_stacktrace.txt > deobfuscated_stacktrace.txt

这会将还原后的堆栈跟踪保存到deobfuscated_stacktrace.txt文件中。

3.3 解释retrace输出

还原后的堆栈跟踪将显示原始类名、方法名和行号,你可以根据这些信息定位到源代码中的具体位置。

4. 检查ProGuard规则

如果问题是由于混淆导致某些类或方法被错误地混淆,可以检查ProGuard配置文件,确保需要保留的类和方法被正确配置。

示例

混淆前代码
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 假设这里有个错误
        int result = 10 / 0;
    }
}
混淆后堆栈跟踪
java.lang.ArithmeticException: divide by zero
    at a.a(Unknown Source:0)
    at a.b(Unknown Source:0)
    at a.c(Unknown Source:0)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
使用retrace还原堆栈跟踪

执行以下命令:

retrace -verbose mapping.txt obfuscated_stacktrace.txt > deobfuscated_stacktrace.txt
还原后的堆栈跟踪
java.lang.ArithmeticException: divide by zero
    at com.example.myapp.MainActivity.onCreate(MainActivity.java:15)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)

5. 进一步调试和修复

根据还原后的堆栈跟踪,定位到原始代码中的错误位置进行调试和修复。

其他工具和方法

使用Android Studio的内置工具

Android Studio内置了对ProGuard和R8的支持,可以在构建配置中启用和配置ProGuard,并生成映射文件。此外,Android Studio的Logcat视图中可以直接看到还原后的堆栈跟踪信息。

检查混淆配置

如果某些库或框架在混淆后出现问题,可能需要添加或修改ProGuard规则,以确保这些库或框架的类和方法不会被错误地混淆。

例外配置
-keep class com.example.myapp.** { *; }

总结

通过使用混淆映射文件和retrace工具,可以将混淆后的堆栈跟踪还原为原始代码,从而定位和解决混淆后的代码问题。确保在ProGuard配置文件中正确配置保留规则,以防止必要的类和方法被混淆。

【鸿蒙开发】—— 代码混淆 针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、 编译模式为release 时自动进行代码混淆。 阅读详情

相关推荐

HarmonyOS 代码混淆

针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、编译模式为release时自动进行代码混淆。// 混淆前// 混淆后导出的类 “Test1” 是一个顶层作用域名,当 “Test1” 被动态使用时,它是一个属性。因为没有开启-enable-property-obfuscation选项,所以名称混淆了,但属性没有混淆。

qq_36158551的博客 1338

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

(3)Proguard Retrace Unscrambler / Proguard Unscramble选择其中一个。Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志。

Zhang Phil 1485

【鸿蒙 HarmonyOS】开发必备——代码混淆

针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、 编译模式为release 时自动进行代码混淆。

weixin_50589123的博客 1219

Android如何定位混淆后代码错误行数

一、背景 现在大多数app打包时都会做代码混淆,这样能增加代码的安全性,防止别人反编译。但同时也带来一个问题,如果代码报错了,我们无法准确的定位到哪个类多少行报的错误,下面介绍一下如何解决这个问题的方法。 二、需要用到的工具 1、SDK提供给我们的工具:proguardgui.sh,路径:sdk/tools/proguard/bin/,作用:通过此工具来还原错误行数 2、app打包时生成的...

不将就 4305

HarmonyOS核心知识点:代码混淆

针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、 编译模式为release 时自动进行代码混淆。

wuliusan5的博客 935

Android代码混淆

一、代码混淆作用: 防止反编译; 精简编译后的apk文件大小; 二、开启混淆: 在项目的build.gradle中开启混淆: 将minifyEnabled的值改为true即开启:其中debug为测试版本,release为发布版本 三、混淆说明: 开启混淆后Android会用自带的混淆进行代码混淆,如在安装Android SDK的目录下的proguard-android.txt或proguard-android-optimize.txt文件为默认混淆文件。对于自己定义的混淆需要在proguar

走马川行雪的博客 5582

AppIntro混淆代码调试:Retrace工具使用指南

在Android应用开发中,代码混淆(ProGuard/R8)是保护应用安全的重要手段,但也为调试崩溃日志带来挑战。当使用AppIntro库开发应用引导页时,混淆后的堆栈跟踪往往难以定位具体问题。本文将详细介绍如何使用Retrace工具(Android SDK自带的混淆映射解析工具)快速还原AppIntro相关的混淆代码,提升调试效率。 ## 混淆配置基础 AppIntro库已内置混淆规则,位...

gitblog_00276的博客 1261

app混淆后报错,如何快速的定位

混淆后报错的定位 有时,为了方便调试,在进行debug打包安装的时候,通常使用的是release的签名文件。所以这就导致调试出现代码被混淆了(出现a b c等别名),程序崩溃后,定位不到错误的位置和方法。延误开发进度。 1.混淆后,如何显示报错的行号 在proguard-rules.pro 文件中加入 # 设置报错显示行号 -renamesourcefileattribute SourceFile...

奋斗的IT小民工的博客 2049

Android studio代码混淆后导致项目报错

Android Studio代码混淆后导致项目报错解析 在Android开发过程中,代码混淆是一种常见的优化手段,它通过重命名变量和方法来减小APK的大小,同时提高代码的安全性。然而,混淆后的代码可能会导致一些运行时错误,本文将针对这一问题进行详细解析。 代码混淆简介 代码混淆是一种将代码中的变量名、方法名等信息替换为难以...

weixin_33655208的博客 374

iOS代码混淆的探索

####目的 为了进一步增加应用的安全性,防止我们的应用程序很容易的被攻击者分析、破解、重打包,提高攻击者逆向分析应用的难度 ####应用的加固方案 数据加密:静态字符串、本地存储和网络传输的加密 静态混淆:类名、方法名、属性的混淆 动态保护:反调试、注入检测、hook检测、越狱检测、签名检测等 代码混淆:将代码分快、扁平化、增加干扰代码,以提高分析者的分析难度 ####下面结合具体应用场景说...

miracle的博客 1875

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

android 混淆后的异常信息 工具处理

D:\Android\sdk\tools\proguard\bin\proguardgui.bat 工具在SDK中的位置,有的SDK版本不同这个工具的具体位置可能有改变,也可以在tools中直接搜索proguardgui.bat,双击运行即可。3、Obfuscated stack trace输入你收集到的异常信息,注意是异常信息,并不是我们刚才收集的那些所有的信息,刚才收集的信息中还包含了手机的一些信息,这些不需要,只复制这些到输入框。混淆前后类、方法、类成员等的对照。APK文件中所有类的内部结构。

青铜的博客 929

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 143

HarmonyOS代码混淆

在鸿蒙(HarmonyOS)开发中,代码混淆的主要目的是保护代码不被反编译,提升应用的安全性。从DevEco Studio版本:4.0 Beta1开始hvigor插件提供代码混淆功能。因此我将deveco studio从3.1release升级到了5.0release。

m0_74231873的博客 2014

2024高项范文-论项目成本管理

例如,在需求分析和设计阶段,安排了较多经验丰富的人员,确保基础工作的高质量完成,同时也避免了后续因需求变更等问题导致的时间和成本浪费。虽然项目进度略有延迟,但通过有效的成本管理和调整,最终在可控的成本范围内完成了项目,并且软件的质量也得到了保障。通过这个案例可以看出,在项目成本管理过程中,要紧密结合时间管理,根据实际情况灵活调整策略,注重风险的防范和应对,才能实现时间和成本的平衡,确保项目的成功。资源规划是成本基准形成的基础。识别和评估项目中的成本风险,并制定相应的应对措施,以降低风险对项目成本的影响。

xjflion的博客 1188

mmpretrain学习笔记

(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’(7)适当的修改num_workers、epochs、batch_size、lr等。3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等。my_resnet18_8xb32_in1k.py 完整的配置文件。(6)split=‘train’、split='val’注释掉。2、数据:数据集划分、数据文件路径、批大小、数据增强策略等。

吃葡萄不吐葡萄皮 937

聊聊如何进行代码混淆

​前言什么是代码混淆代码混淆,是指将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆常见手段1、名称混淆将有意义的类,字段、方法名称更改为无意义的字符串。生成的新名称越短,字节代码越小。在名称混淆的字节代码中,包,类,字段和方法名称已重命名,并且永远不能恢复原始名称。不幸的是,控制流程仍然清晰可见。故而需要流混淆2、流混淆用于if, switch, while,for等关键字,对字节码进行细微的修改,模糊控制流,而不改变代码在运行时的行为。

m0_74760716的博客 1387

Aras Innovator生命周期图实战:从配置到权限管理的全流程解析

本文详细解析了Aras Innovator生命周期图的全流程配置与权限管理,从基础概念到实战应用,涵盖状态设置、路径配置、权限控制等核心功能。通过实际案例和代码示例,帮助用户掌握如何高效管理数据生命周期,提升业务流程的规范性和效率。

ee345的博客 168

【HarmonyOS NEXT】鸿蒙 代码混淆

针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、编译模式为release时自动进行代码混淆。

wu1004019946的博客 3287

STM32 使用IO口模拟I2C时序

上一篇《I2C协议详解》 我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。 我们做两种选择: 1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。 2.时序由硬件自行产生,不需要人工干预; 由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对...

8937

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

鸿蒙NEXT开发浅进阶到精通01:代码混淆加固如何实现

代码混淆是一种软件安全技术,旨在增加代码的复杂性和模糊性,从而增加攻击者分析和理解代码的难度。实现混淆加固大体分为三步走:1-开启混;2-配置混;3-打包淆。

m0_72778152的博客 1972

【HFSS】仿真目录

Author: JiJi\textrm{Author: JiJi}Author: JiJi Created Time: 2026.04.27\textrm{Created Time: 2026.04.27}Created Time: 2026.04.27 Modified Time: 2026.04.27\textrm{Modified Time: 2026.04.27}Modified Time: 2026.04.27如果大家觉得有用,就点个赞吧,在阅读过程中存在任何困惑,可在下方评论区留言~

u011699626的博客 310

Android 代码混淆Proguard

假设没指定白名单就进行混淆打包,而某某类的类名被混淆了(假设变成了a),那么可能其他引用或使用该类的类就找不到该类,说不定应用就会因此崩溃或是导致相应的功能无法使用。在Android的具体表现就是打包时,将项目里的包名、类名、变量名根据混淆规则进行更改,使反编译工具反编译出来的代码人难以阅读,从而达到防止被逆向破解的目的。Android代码混淆,又称Android混淆,是伴随着Android系统的流行而产生的一种APP保护技术,用于保护APP不被破解和逆向分析。(每次混淆修改后,打包前注意clean)

DeMonnnnnn 4470

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

jar包代码混淆

代码混淆

lonewolves的博客 1629

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 代码混淆报错,android 代码混淆 报错

1------------------Proguard returned with error code 1. See console[2012-06-15 15:32:26 - FlashTest] Error: @C:\Users\ADMINI~1\AppData\Local\Temp\android_1110671921306709170.pro (文件名、目录名或卷标语法不正确。)网上查了...

weixin_28875613的博客 288

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: ProGuard配置详解
下一篇: Android代码混淆时做了什么
彬_小彬
博客等级 码龄10年 574粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

彬_小彬

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值