在keras中,数据是以张量的形式表示的,不考虑动态特性,仅考虑shape的时候,可以把张量用类似矩阵的方式来理解。例如[[1],[2],[3]]这个张量的shape为(3,1)[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]]这个张量的shape为(3,2,2),[1,2,3,4]这个张量的shape为(4,)input_shape:即张量的shape。从前往后对应由外向内的维度。input_length:代表序列长度,可以理解成有多少个样本input_dim:代表张量的维度,(很好理解,...
继续阅读 >
分类:Keras
2020
10-08
10-08
使用keras时input_shape的维度表示问题说明
Keras提供了两套后端,Theano和Tensorflow,不同的后端使用时维度顺序dim_ordering会有冲突。对于一张224*224的彩色图片表示问题,theano使用的是th格式,维度顺序是(3,224,224),即通道维度在前,Caffe采取的也是这种方式。而Tensorflow使用的是tf格式,维度顺序是(224,224,3),即通道维度在后。Keras默认使用的是Tensorflow。我们在导入模块的时候可以进行查看,也可以切换后端。为了代码可以在两种后端兼容,可以通过data_f...
继续阅读 >
2020
10-08
10-08
在Keras中CNN联合LSTM进行分类实例
我就废话不多说,大家还是直接看代码吧~defget_model():n_classes=6inp=Input(shape=(40,80))reshape=Reshape((1,40,80))(inp)#pre=ZeroPadding2D(padding=(1,1))(reshape)#1conv1=Convolution2D(32,3,3,border_mode='same',init='glorot_uniform')(reshape)#model.add(Activation('relu'))l1=LeakyReLU(alpha=0.33)(conv1)conv2=ZeroPadding2D(padding=(1,1))(l1)conv2=Convolution2D(32,3,3,...
继续阅读 >
2020
10-08
10-08
使用keras实现BiLSTM+CNN+CRF文字标记NER
我就废话不多说了,大家还是直接看代码吧~importkerasfromsklearn.model_selectionimporttrain_test_splitimporttensorflowastffromkeras.callbacksimportModelCheckpoint,Callback#importkeras.backendasKfromkeras.layersimport*fromkeras.modelsimportModelfromkeras.optimizersimportSGD,RMSprop,Adagrad,Adamfromkeras.modelsimport*fromkeras.metricsimport*fromkerasimportbackendasKf...
继续阅读 >
2020
10-08
10-08
解决Keras中循环使用K.ctc_decode内存不释放的问题
如下一段代码,在多次调用了K.ctc_decode时,会发现程序占用的内存会越来越高,执行速度越来越慢。data=generator(...)model=init_model(...)foriinrange(NUM):x,y=next(data)_y=model.predict(x)shape=_y.shapeinput_length=np.ones(shape[0])*shape[1]ctc_decode=K.ctc_decode(_y,input_length)[0][0]out=K.get_value(ctc_decode)原因每次执行ctc_decode时都会向计算图中添加一个节点,这样...
继续阅读 >
2020
10-08
10-08
keras在构建LSTM模型时对变长序列的处理操作
我就废话不多说了,大家还是直接看代码吧~print(np.shape(X))#(1920,45,20)X=sequence.pad_sequences(X,maxlen=100,padding='post')print(np.shape(X))#(1920,100,20)model=Sequential()model.add(Masking(mask_value=0,input_shape=(100,20)))model.add(LSTM(128,dropout_W=0.5,dropout_U=0.5))model.add(Dense(13,activation='softmax'))model.compile(loss='categorical_crossentropy',optimizer='adam',...
继续阅读 >
2020
10-08
10-08
使用keras框架cnn+ctc_loss识别不定长字符图片操作
我就废话不多说了,大家还是直接看代码吧~#-*-coding:utf-8-*-#keras==2.0.5#tensorflow==1.1.0importos,sys,stringimportsysimportloggingimportmultiprocessingimporttimeimportjsonimportcv2importnumpyasnpfromsklearn.model_selectionimporttrain_test_splitimportkerasimportkeras.backendasKfromkeras.datasetsimportmnistfromkeras.modelsimport*fromkeras.layersimport*fromkeras.optimiz...
继续阅读 >
2020
10-08
10-08
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
一、K.prodprodkeras.backend.prod(x,axis=None,keepdims=False)功能:在某一指定轴,计算张量中的值的乘积。参数x:张量或变量。axis:一个整数需要计算乘积的轴。keepdims:布尔值,是否保留原尺寸。如果keepdims为False,则张量的秩减1。如果keepdims为True,缩小的维度保留为长度1。返回x的元素的乘积的张量。Numpy实现defprod(x,axis=None,keepdims=False):ifisinstance(axis,list):axis=tuple(ax...
继续阅读 >
2020
10-08
10-08
keras K.function获取某层的输出操作
如下所示:fromkerasimportbackendasKfromkeras.modelsimportload_modelmodels=load_model('models.hdf5')image=r'image.png'images=cv2.imread(r'image.png')image_arr=process_image(image,(224,224,3))image_arr=np.expand_dims(image_arr,axis=0)layer_1=K.function([base_model.get_input_at(0)],[base_model.get_layer('layer_name').output])f1=layer_1([image_arr])[0]加载训练好并保存的网络模型...
继续阅读 >
2020
10-08
10-08
在keras里实现自定义上采样层
Keras里的UpSampling2D层不是中的双线性内插,而是简单的重复图像。这点和pytorch不一样,pytorch默认使用的是双线性内插。同样:这里仍然使用的是keras而不是tf.keras.keras里UpSampling2D的部分定义说明如下:classUpSampling2D(Layer):"""Upsamplinglayerfor2Dinputs.Repeatstherowsandcolumnsofthedatabysize[0]andsize[1]respectively.可以看出,这里的上采样确实只是简单的图像重复。要想使用双线性或...
继续阅读 >
2020
10-08
10-08
keras 自定义loss层+接受输入实例
loss函数如何接受输入值keras封装的比较厉害,官网给的例子写的云里雾里,在stackoverflow找到了答案Youcanwrapthelossfunctionasainnerfunctionandpassyourinputtensortoit(ascommonlydonewhenpassingadditionalargumentstothelossfunction).defcustom_loss_wrapper(input_tensor):defcustom_loss(y_true,y_pred):returnK.binary_crossentropy(y_true,y_pred)+K.mean(input_tensor)return...
继续阅读 >
这是最近碰到一个问题,先描述下问题:首先我有一个训练好的模型(例如vgg16),我要对这个模型进行一些改变,例如添加一层全连接层,用于种种原因,我只能用TensorFlow来进行模型优化,tf的优化器,默认情况下对所有tf.trainable_variables()进行权值更新,问题就出在这,明明将vgg16的模型设置为trainable=False,但是tf的优化器仍然对vgg16做权值更新以上就是问题描述,经过谷歌百度等等,终于找到了解决办法,下面我们一点一点的...
继续阅读 >
2020
10-08
10-08
Keras: model实现固定部分layer,训练部分layer操作
需求:Resnet50做调优训练,将最后分类数目由1000改为500。问题:网上下载了resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5,更改了Resnet50后,由于所有层均参加训练,导致训练速度慢。实际上只需要训练最后3层,前面的层都不需要训练。解决办法:①将模型拆分为两个模型,一个为前面的notop部分,一个为最后三层,然后利用model的trainable属性设置只有后一个model训练,最后将两个模型合并起来。②不用拆分,遍历模型的...
继续阅读 >
2020
10-08
10-08
Keras中的两种模型:Sequential和Model用法
在Keras中有两种深度学习的模型:序列模型(Sequential)和通用模型(Model)。差异在于不同的拓扑结构。序列模型Sequential序列模型各层之间是依次顺序的线性关系,模型结构通过一个列表来制定。fromkeras.modelsimportSequentialfromkeras.layersimportDense,Activationlayers=[Dense(32,input_shape=(784,)),Activation('relu'),Dense(10),Activation('softmax')]model=Sequential(layers)或者逐层添加...
继续阅读 >
2020
10-08
10-08
keras输出预测值和真实值方式
在使用keras搭建神经网络时,有时需要查看一下预测值和真是值的具体数值,然后可以进行一些其他的操作。这几天查阅了很多资料。好像没办法直接access到训练时的数据。所以我们可以通过回调函数,传入新的数据,然后查看预测值和真是值。参考这篇解决:https://stackoverflow.com/questions/47079111/create-keras-callback-to-save-model-predictions-and-targets-for-each-batch-durin我的解决方法是这样的:fromkeras.callbacks...
继续阅读 >
2020
10-08
10-08
使用Keras预训练好的模型进行目标类别预测详解
前言最近开始学习深度学习相关的内容,各种书籍、教程下来到目前也有了一些基本的理解。参考Keras的官方文档自己做一个使用application的小例子,能够对图片进行识别,并给出可能性最大的分类。闲言少叙,开始写代码环境搭建相关就此省去,网上非常多。我觉得没啥难度fromkeras.applications.resnet50importResNet50fromkeras.preprocessingimportimagefromkeras.applications.resnet50importpreprocess_input,decode_pr...
继续阅读 >