keras 从入门开始
深度学习框架中keras备受推崇。如果tensorflow不会,直接从keras上手会怎么样。本专栏直接使用最简单的api。
TinaO-O
这个作者很懒,什么都没留下…
展开
-
超简单keras 多GPU数据并行
超级简单:import:from keras.utils import multi_gpu_model这里以unet为例,首先使用标准的unet建立一个unet模型: model = unet(input_size=(480, 640, 3))然后注意自己是否有四个可见的GPU:os.environ['CUDA_VISIBLE_DEVICES'] = "4,5,6...原创 2019-05-31 09:57:09 · 4478 阅读 · 6 评论 -
keras data generator 调试
在写了代码:https://blog.csdn.net/u013249853/article/details/90408122之后,我们希望能够看到,每次到底生成了什么因为如果你有数据扩增的代码,你就会想知道我生成的对不对,能不能调试,那么简单直观的调试代码如下[a,b] = training_generator.__getitem__(1)validation_generat...原创 2019-05-27 14:02:34 · 880 阅读 · 0 评论 -
keras data fit generator 数据生成器 多输入数据生成器 图片 分割 逐像素label 直观调试 生成图片
此处以keras为例。多数的深度学习方法都是支持批量yeild数据,而不是直接加载所有数据到内存。给一个对比:25512是未使用数据生成器的30777是使用数据生成器的。但是必须要说明的,GPU的内存是不会减少的,都是有多少用多少。给的多就多用,给的少就少用。那么首先给出原始教程:https://stanford.edu/~shervine/bl...原创 2019-05-21 15:56:25 · 2193 阅读 · 1 评论 -
深度学习工作环境对比
windows/ubuntu(linux)端 pycharm 调试 代码。ubuntu 端用 nohup 跑代码并且使用一个epoch 打印一次validation与training结果的打印模式,要不然会很多结果。或者使用 tmux多窗口后台跑。但是这样有几个缺点:1.没办法看总体历史情况2.那个窗口运行的是哪个程序,这个容积记不住3.github有没有自动生成的lo...原创 2019-05-20 09:29:47 · 597 阅读 · 0 评论 -
深度学习 损失变成 nan keras tensorflow 损失函数无限大
一种可能的原因是你用了relu 之后马上又用了softmax这两个激活函数用在连续的两层上可能会造成这种情况。参考:https://github.com/keras-team/keras/issues/1244...原创 2019-05-20 08:37:11 · 2338 阅读 · 0 评论 -
keras 如何自定义 多输入参数的 自定义层
现有的层不能满足需求,需要自己写个自定义层。需要多个参数为输入。仅适用于没有参数更新的自定义层。def multi_input(input): input1 = input[0] input2 = input[1] input3 = input[3]x = Lambda(multi_input)([q,y,z])之后input1 = q , input2...原创 2019-05-10 09:56:28 · 3388 阅读 · 3 评论 -
keras 数据增强三种思路
任务描述:对原始图片与标注图片做相同的数据增强。保持标签与图片的一致。最优选择:keras 可用,用起来简单,自己写的代码尽量少,避免出错。https://blog.csdn.net/qq_28792801/article/details/80866234https://blog.csdn.net/u010397980/article/details/88088025open...原创 2019-05-06 16:12:12 · 1605 阅读 · 0 评论 -
keras 类平均准确率 recall prediction的计算
注意,这是在训练好之后,预测测试集,然后求类平均。来自在于from sklearn.metrics import classification_reportimport numpy as npY_test = np.argmax(y_test, axis=1) # Convert one-hot to index这里把onehot转成了整数[1,2,10,1,2,1]y_pred =...原创 2019-04-19 11:38:20 · 4741 阅读 · 2 评论 -
十个原因可能导致 训练集明明很高,验证集,测试集 validation accuracy stuck 准确率 很低 损失不减小
损失函数一直在下降,为什么识别率上不去。1.最常见的原因:过拟合过拟合值得单独开个章节。主要包括1.数据量小,网络复杂2.learning rate 比较高,又没有设置任何防止过拟合的机制解决方法主要包括1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug)2.利用 dropout层3.利用正则化2.你犯了错误:没有把数据规格化图片...原创 2019-04-19 10:07:29 · 107214 阅读 · 108 评论 -
keras missing label unlabeled 未标注类 如何训练 如何自定义损失函数 去除未标注类 缺少标签
我从这里找到的答案:def ignore_unknown_xentropy(ytrue, ypred): return (1-ytrue[:, :, :, 0])*categorical_crossentropy(ytrue, ypred)然后下面是我的代码:我感觉看到这个帖子的应该都看得懂吧(其实就是懒得解释了,请看注释)from __future__ import...原创 2019-04-17 16:36:23 · 956 阅读 · 1 评论 -
Error when checking model target: expected activation_2 to have shape (None, 10) but got array with
我遇到了这个问题,因为我在用reshape层后,忘了改我的GT label的尺寸。reshape最终的输出是10长度的,但是标签用的还是1长度的就是(0,0,1,0,0,0,0,...)与3的不匹配...原创 2019-04-17 14:55:55 · 2508 阅读 · 0 评论 -
keras 实现dense prediction 逐像素标注 语义分割 像素级语义标注 pixelwise segmention labeling classification 3D数据
主要是keras的示例都是图片分类。而真正的论文代码,又太大了,不适合初学者(比如我)来学习。所以我查找了一些资料。我在google 上捞的。其中有个教程让人感觉很好.更完整的教程。另一个教程。大概就是说,你的输入ground truth label需要是(width*height,class number),然后网络最后需要加个sigmoid,后面用binary_crossentro...原创 2019-04-17 11:46:23 · 1544 阅读 · 4 评论 -
keras 整数编码转成onehot编码
import kerasy_train = keras.utils.to_categorical(y_train, num_classes)y_test = keras.utils.to_categorical(y_test, num_classes)y就是整数编码原创 2019-04-16 08:42:46 · 1334 阅读 · 0 评论 -
keras 将softmax值转成onehot 最大值赋值1 其他赋值0
注意: 当使用categorical_crossentropy损失时,你的目标值应该是分类格式 (即,如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。 为了将整数目标值转换为分类目标值,你可以使用 Keras 实用函数to_categorical:from keras.utils.np_utils impor...原创 2019-04-15 21:52:00 · 2379 阅读 · 0 评论 -
初学者深度学习搭建网络容易出错的‘大因素’
1.网络输出与监督信号的尺寸应该匹配如果你的输出是128*128*10的结果,那么你的监督信号也应该是128*128*10如果你的监督信号是128*128*1,但是最后一个维度是整数,比如[1,10,2,3,1,1,1...]但是你的输出是128*128*10,那你可以考虑使用sparse 损失函数。categorical_sparse_crossentropy2.监督信号应注意...原创 2019-04-15 16:15:03 · 755 阅读 · 0 评论 -
keras 截取 resnet 等现有网络的 中间层 拼接到自己的网络上 改现有网络结构 保持权重
这次主要使用get_layer方法设置截取网络的起点与终点。直接看代码:from __future__ import print_functionimport numpy as npimport matplotlib.pyplot as pltimport osimport kerasfrom keras import Modelfrom keras.applications...原创 2019-04-11 15:26:09 · 2690 阅读 · 2 评论 -
embedding层为什么理解起来这么费劲 能不能给我简单直观的解释清楚
原因就是你没找到合适的教程。如果这篇你看不明白,关了,下一篇。embedding层有什么用首先,embedding是为了处理文字的理解。让机器能够理解一句话的意思: 灰白灰会挥发。一句话,6个字。但是只有五种 白,灰,会,挥,发。编码我们需要将汉字表达成网络认识的数字,比如我用整数表达。白:2灰:1会:3挥:4发:5句子就可以写成121345。我用3...原创 2019-04-10 21:48:52 · 5714 阅读 · 13 评论 -
keras 获取某层的输入/输出 tensor 尺寸
获取单输入尺寸,该层只被使用了一次。import kerasfrom keras.layers import Input, LSTM, Dense, Conv2Dfrom keras.models import Modela = Input(shape=(32, 32, 3))b = Input(shape=(64, 64, 3))conv = Conv2D(16, (3, 3)...原创 2019-04-10 19:12:31 · 6001 阅读 · 2 评论 -
keras 获取某层输出 获取复用层的多次输出
官方文档很全面,搜索功能也很好。但是如果你想单独实现某个功能,根本无从搜寻。于是我写了这个笔记。从功能出发。两个tensor经过一个layer实例会产生两个输出。a = Input(shape=(280, 256))b = Input(shape=(280, 256))lstm = LSTM(32)encoded_a = lstm(a)encoded_b = lstm(b)...原创 2019-04-10 18:52:41 · 3151 阅读 · 2 评论 -
keras.layer.input()
tenserflow建立网络由于先建立静态的graph,所以没有数据,用placeholder来占位好申请内存。那么keras的layer类其实是一个方便的直接帮你建立深度网络中的layer的类。该类继承了object,是个基础的类,后续的诸如input_layer类都会继承与layer由于model.py中利用这个方法建立网络,所以仔细看一下:他的说明详尽而丰富。input()这...原创 2019-04-02 08:45:32 · 23570 阅读 · 0 评论 -
keras 拼接两个函数api 为修改backbone并且使用其权重做准备
这个代码网络是model2,他用了我之前写的model_mine的网络结构。from keras.models import Modelfrom keras.layers import Input, Dense, Lambda,adda = Input(shape=(640, 480, 3))b = Input(shape=(23,))c = Input(shape=(54,...原创 2019-04-09 16:36:53 · 993 阅读 · 0 评论 -
keras optimizers 优化器
优化器就是向模型打包传递参数,什么参数呢,就是我们训练时使用到的诸如,学习率,衰减,momentum,梯度下降得到若干种方式,用不用动量等等。你可以在一开始传入这个值,然后就一直使用这个值训练,也可以在训练时根据epoch调整参数。optimizers的两种使用方式一,在使用compile调用之前就生成自定义的optimizer实例,这种给用户的自由最大,但是同样的你也需要定义很多个参数:...原创 2019-04-09 15:26:59 · 12820 阅读 · 5 评论 -
超简单的keras函数模型教程
from keras.models import Modelfrom keras.layers import Input, Dense, Lambdaa = Input(shape=(640, 480, 3))b = Input(shape=(23,))c = Input(shape=(54,))d = Dense(32)(b)multi = Lambda(lambda x: x*...原创 2019-04-09 10:59:15 · 697 阅读 · 0 评论 -
python3 匿名函数 与 生成器
对于keras来讲,这两个概念很重要。匿名函数很简单,有时候我们的函数很简单,我们就会想要偷个懒,不想再单独出去定义新的方法,现在立刻马上就顺手写个函数。这时就需要匿名函数。比如map(func(),list)的作用是将list当中的每个元素都当作参数输入到func()这个函数中。如果我就做个x*x操作,就可以简单的写道:list_a = list(range(10))prin...原创 2019-04-04 08:39:05 · 279 阅读 · 3 评论