弦歌雅意的小屋

  • 首页

  • 分类

  • 归档

Keras 图片分类算法中的参数设置简介

发表于 2019-07-08 | 更新于 2019-07-09 | 分类于 人工智能

Keras 图片分类算法中的参数设置简介

数据增强(Data Augment)

一般只对训练集增强,不对验证集增强。

1
2
ImageDataGenerator.flow_from_directory(TRAIN_PATH, class_mode='categorical',  #one hot encode
target_size=(64, 64), color_mode='rgb', shuffle=True,batch_size=BS)

class_mode=’categorical’: 使用one-hot编码
class_mode=’binary’: 使用二进制编码,一般用于二分类
target_size: 用来调整网络输入图片大小
batch_size:一次生成图片数

阅读全文 »

Keras2.0 fit_generator 方法签名改变导致1.0版本代码训练变慢

发表于 2019-07-07 | 更新于 2019-07-09 | 分类于 人工智能

Keras2.0 fit_generator 方法签名改变导致1.0版本代码训练变慢

keras2.0 版本fit_generator方法签名

1
2
3
4
5
6
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
validation_data=validation_generator,
validation_steps = nb_validation_samples // batch_size,
epochs=epochs)

keras1.0 版本fit_generator方法签名

1
2
3
4
5
6
model.fit_generator(
train_generator,
samples_per_epoch=nb_train_samples,
epochs=epochs,
validation_data=validation_generator,
nb_val_samples=nb_validation_samples)

虽然1.0版本的代码在2.0版本上可以运行,但是因为参数没有正确设置,训练期间跑验证集时速度很慢(validation_steps的值为1),我自己测试时一轮需要的时间多4倍。
其实当这个函数在执行时,Keras会提示开发者对参数进行修改,所以使用Keras时千万不要忽略了提示信息。

Keras2.0 使用预训练模型权重创建网络的两种方式

发表于 2019-07-06 | 更新于 2019-07-09 | 分类于 人工智能

Keras2.0 使用预训练模型权重创建网络的两种方式

使用预训练模型进行迁移学习,是一种常见的资源利用,加速训练的方法。
在图形分类问题中常用的网络有VGG16、VGG19、ResNet50等
Keras内置了这些常见经典算法的imagenet数据集上的训练权重。

阅读全文 »

Keras模型训练小技巧

发表于 2019-07-01 | 更新于 2019-07-02 | 分类于 人工智能

Keras模型训练小技巧

  1. 建立基线模型
    首先建立一个模型,以训练以后的效果做参考,持续改进。
  2. 模型正则化
    a. dropout
    b. 数据增强
  3. 提示训练数据偏差
  4. 迁移学习
    a. 使用已训练的模型(加载预训练权重)
    b. 重新构建顶层
    c. 锁定其他层
    d. 重新训练
    e. 保存新训练的模型信息
    f. 加载保存的模型信息
    e. 对更多顶层进行训练
  5. VGG网络对输入图片进行color center处理(减去bgr均值(123.68, 116.779, 103.939))

逆向时如何在启动时加载自己添加的代码

发表于 2019-06-30 | 更新于 2019-06-29 | 分类于 逆向工程

逆向时如何在启动时加载自己添加的代码

现在的App中包含两三个dex已经不是很平常的事了。

我们解开App的代码后,如何方便的把我们的代码添加进去并顺利加载呢?
特别是想启动时就加载。

阅读全文 »

Win10中 Linus subsystem 返回的系统类型为linux

发表于 2019-06-29 | 分类于 软件开发

Win10中Linus subsystem 返回的系统类型为linux

在命令行中进入了Linux Subsystem中执行Shell程序。
忘记退出子系统了,开始执行一个Java程序,结果遇到一个可执行命令行程序中代码的错误。担负修改编译调试Windows上的代码,问题依旧。单独在IDE中调试目标程序,执行结果正常。
抓狂中…

阅读全文 »

重生但无浴火

发表于 2019-06-28 | 分类于 随笔

虽重生,但无浴火。

原来写的Blog源文件不幸遗失,没了模板文件,github上更新也很不方便,所以一直也没有再写,人自然也就慵懒了,当然也就没有什么值得一写的东西了。

现在决定重新翻新一次。

下载github上的版本。
重新安装Hexo。
把原来的网页,重新整理成md文件。

重生是痛苦的,这是又暗暗庆幸好在自己写的东西并不多。

重生也是一次整理,把一些现在没价值的文章抛弃了,把分类关键字重新整理了一下,把系列文件合并了一些。

重生是一种学习,把过去的文章读一遍,咋不记得还写过这些东西。重建一次博客环境,学到一些新特性。

最后推荐一下md写作工具Typora,刚安装时,觉得一个文本编写工具40多M,很不值,功能也没多强大。这是发现粘贴功能确实不错,把网页上的内容直接粘贴进去,格式基本就是好的,不用怎么编辑。这次重新整理过程中受益匪浅。

给aapt添加支持uincode类名功能

发表于 2019-05-01 | 更新于 2019-10-09 | 分类于 逆向工程

给aapt添加支持uincode类名功能

aapt 是什么?

aapt是Android App资源打包工具。

为什么有这个需求

  1. Android的开发语言Java用uincode字符作为类名、字段名和方法名。
  2. 现实中专业开发人员很少用uincode字符作为类名、字段名和方法名。
  3. aapt在开发时没有考虑做这种支持,但其实资源文件中和AndroidManifest.xml中会引用到java类名(Activity类,自定义View类等)。
  4. 一些商业代码混淆工具利用这个特性增加逆向工程的难度。如把类名混淆为不可见unicode字符,影响人类阅读分析,但不影响虚拟机执行。
  5. 资源文件和AndroidManifest.xml中的类也需要替换为混淆后的类名。这些商业工具在混淆的时候也对资源文件和AndroidManifest.xml进行了相应处理。
  6. Android逆向人员重新打包App时,需要使用到aapt工具,但aapt无法处理这种情况。
阅读全文 »

用scale参数解决iOS图片模糊问题

发表于 2018-12-02 | 更新于 2019-06-27 | 分类于 iOS开发

用scale参数解决iOS图片模糊问题

iOS开发资源用到的图片有一倍图、二倍图(@2x)和三倍图(@3x, 主要是plus系列)。
程序资源包中的资源使用时,系统会自动适配屏幕分辨率,采用合适的图片或缩放需要的图片。
但是当在程序运行中动态生成的图片则有可能会模糊。
这主要是没有充分利用scale参数导致的。

阅读全文 »

JStack 处理线程死锁和等待问题

发表于 2018-11-02 | 更新于 2019-06-27 | 分类于 Java开发

JStack 处理线程死锁和等待问题

eclipse运行程序,没有使用调试模式,程序运行了一小时后,结果发现程序不在处理任务,此时在Eclipse里面没法再attach到进程上。终止程序又会失去找到问题的机会,怎么办呢。

JDK中带了一些工具,可以帮助调试。jstack就是其中的一个。
首先在任务管理器中(linux/mac osx可以使用ps)找到应用的进程id, 这里假设为1000;
然后在命令行(或终端)执行: jstack -l 1000

阅读全文 »
123…8
Erik Lu

Erik Lu

从事软件开发多年
目前致力于移动开发
平时喜欢逆向工程
现在学习人工智能中
擅长Java、Swift、Python、Javascript
喜爱Linux Shell
72 日志
19 分类
71 标签
GitHub
© 2014 – 2022 Erik Lu
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Pisces v7.1.2