在keras下实现多个模型的融合方式_python

来源:脚本之家  责任编辑:小易  

Keras 是提供一些高可用的 Python API,能帮助你快速的构建和训练自己的深度学习模型,它的后端是 TensorFlow 或者 Theano。本文假设你已经熟悉了 TensorFlow 和卷积神经网络,如果,你还没有熟悉,那么可以先看看这个10分钟入门 TensorFlow 教程和卷积神经网络教程,然后再回来阅读这个文章。在这个教程中,我们将学习以下几个方面:为什么选择 Keras?为什么 Keras 被认为是深度学习的未来?在Ubuntu上面一步一步安装Keras。Keras TensorFlow教程:Keras基础知识。了解 Keras 序列模型4.1 实际例子讲解线性回归问题使用 Keras 保存和回复预训练的模型Keras API6.1 使用Keras API开发VGG卷积神经网络6.2 使用Keras API构建并运行SqueezeNet卷积神经网络1.为什么选择Keras?Keras 是 Google 的一位工程师Fran?ois Chollet 开发的一个框架,可以帮助你在 Theano 上面进行快速原型开发。后来,这被扩展为 TensorFlow 也可以作为后端。并且最近,TensorFlow决定将其作为 contrib 文件中的一部分进行提供。Keras 被认为是构建神经网络的未来,以下是一些它流行的原因:轻量级和快速开发:Keras 的目的是在消除样板代码。几行 Keras 代码就能比原生的 TensorFlow 代码实现更多的功能。你也可以很轻松的实现 CNN 和 RNN,并且让它们运行在 CPU 或者 GPU 上面。框架的“赢者”:Keras 是一个API,运行在别的深度学习框架上面。这个框架可以是 TensorFlow 或者 Theano。Microsoft 也计划让 CNTK 作为 Keras 的一个后端。目前,神经网络框架世界是非常分散的,并且发展非常快。具体,你可以看看 Karpathy 的这个推文:想象一下,我们每年都要去学习一个新的框架,这是多么的痛苦。到目前为止,TensorFlow 似乎成为了一种潮流,并且越来越多的框架开始为 Keras 提供支持,它可能会成为一种标准。目前,Keras 是成长最快的一种深度学习框架。因为可以使用不同的深度学习框架作为后端,这也使得它成为了流行的一个很大的原因。你可以设想这样一个场景,如果你阅读到了一篇很有趣的论文,并且你想在你自己的数据集上面测试这个模型。让我们再次假设,你对TensorFlow 非常熟悉,但是对Theano了解的非常少。那么,你必须使用TensorFlow 对这个论文进行复现,但是这个周期是非常长的。但是,如果现在代码是采用Keras写的,那么你只要将后端修改为TensorFlow就可以使用代码了。这将是对社区发展的一个巨大的推动作用。2.怎么安装Keras,并且把TensorFlow作为后端a)依赖安装安装 h5py,用于模型的保存和载入:pip install h5py还有一些依赖包也要安装。pip install numpy scipypip install pillow如果你还没有安装TensorFlow,那么你可以按照这个教程先去安装TensorFlow。一旦,你安装完成了 TensorFlow,你只需要使用 pip 很容易的安装 Keras。sudo pip install keras使用以下命令来查看 Keras 版本。import kerasUsing TensorFlow backend.keras._version_'2.0.4'一旦,Keras 被安装完成,你需要去修改后端文件,也就是去确定,你需要 TensorFlow 作为后端,还是 Theano 作为后端,修改的配置文件位于~/.keras/keras.json。具体配置如下:{floatx":"float32",epsilon":1e-07,backend":"tensorflow",image_data_format":"channels_last}请注意,参数 image_data_format 是 channels_last,也就是说这个后端是 TensorFlow。因为,在TensorFlow中图像的存储方式是[height,width,channels],但是在Theano中是完全不同的,也就是[channels,height,width]。因此,如果你没有正确的设置这个参数,那么你模型的中间结果将是非常奇怪的。对于Theano来说,这个参数就是channels_first。那么,至此你已经准备好了,使用Keras来构建模型,并且把TensorFlow作为后端。3.Keras基础知识在Keras中主要的数据结构是 model,该结构定义了一个完整的图。你可以向已经存在的图中加入任何的网络结构。import kerasKeras 有两种不同的建模方式:Sequential models:这种方法用于实现一些简单的模型。你只需要向一些存在的模型中添加层就行了。Functional API:Keras的API是非常强大的,你可以利用这些API来构造更加复杂的模型,比如多输出模型,有向无环图等等。在本文的下一节中,我们将学习Keras的Sequential models 和 Functional API的理论和实例。4.Keras Sequential models在这一部分中,我将来介绍Keras Sequential models的理论。我将快速的解释它是如何工作的,还会利用具体代码来解释。之后,我们将解决一个简单的线性回归问题,你可以在阅读的同时运行代码,来加深印象。以下代码是如何开始导入和构建序列模型。from keras.models import Sequentialmodels=Sequential()接下来我们可以向模型中添加 Dense(full connected layer),Activation,Conv2D,MaxPooling2D函数。from keras.layers import Dense,Activation,Conv2D,MaxPooling2D,Flatten,Dropoutmodel.add(Conv2D(64,(3,3),activation='relu',input_shape=(100,100,32)))This ads a Convolutional layer with 64 filters of size 3*3 to the graph以下是如何将一些最流行的图层添加到网络中。我已经在卷积神经网络教程中写了很多关于图层的描述。卷积层这里我们使用一个卷积层,64个卷积核,维度是33的,之后采用 relu 激活函数进行激活,输入数据的维度是 `100100*32`。注意,如果是第一个卷积层,那么必须加上输入数据的维度,后面几个这个参数可以省略。model.add(Conv2D(64,(3,3),activation='relu',input_shape=(100,100,32)))MaxPooling 层指定图层的类型,并且指定赤的大小,然后自动完成赤化操作,酷毙了!model.add(MaxPooling2D(pool_size=(2,2)))全连接层这个层在 Keras 中称为被称之为 Dense 层,我们只需要设置输出层的维度,然后Keras就会帮助我们自动完成了。model.add(Dense(256,activation='relu'))Dropoutmodel.add(Dropout(0.5))扁平层model.add(Flatten())数据输入网络的第一层需要读入训练数据。因此我们需要去制定输入数据的维度。因此,input_shape参数被用于制定输入数据的维度大小。model.add(Conv2D(32,(3,3),activation='relu',input_shape=(224,224,3)))在这个例子中,数据输入的第一层是一个卷积层,输入数据的大小是 224*224*3。以上操作就帮助你利用序列模型构建了一个模型。接下来,让我们学习最重要的一个部分。一旦你指定了一个网络架构,你还需要指定优化器和损失函数。我们在Keras中使用compile函数来达到这个功能。比如,在下面的代码中,我们使用 rmsprop 来作为优化器,binary_crossentropy 来作为损失函数值。model.compile(loss='binary_crossentropy',optimizer='rmsprop')如果你想要使用随机梯度下降,那么你需要选择合适的初始值和超参数:from keras.optimizers import SGDsgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)model.compile(loss='categorical_crossentropy',optimizer=sgd)现在,我们已经构建完了模型。接下来,让我们向模型中输入数据,在Keras中是通过 fit函数来实现的。你也可以在该函数中指定 batch_size 和 epochs 来训练。model.fit(x_train,y_train,batch_size=32,epochs=10,validation_data(x_val,y_val))最后,我们使用 evaluate 函数来测试模型的性能。score=model.evaluate(x_test,y_test,batch_size=32)这些就是使用序列模型在Keras中构建神经网络的具体操作步骤。现在,我们来构建一个简单的线性回归模型。4.1 实际例子讲解线性回归问题问题陈述在线性回归问题中,你可以得到很多的数据点,然后你需要使用一条直线去拟合这些离散点。在这个例子中,我们创建了100个离散点,然后用一条直线去拟合它们。a)创建训练数据TrainX 的数据范围是-1 到 1,TrainY 与 TrainX 的关系是3倍,并且我们加入了一些噪声点。import kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy as nptrX=np.linspace(-1,1,101)trY=3*trX+np.random.randn(*trX.shape)*0.33b)构建模型首先我们需要构建一个序列模型。我们需要的只是一个简单的链接,因此我们只需要使用一个 Dense 层就够了,然后用线性函数进行激活。model=Sequential()model.add(Dense(input_dim=1,output_dim=1,init='uniform',activation='linear'))下面的代码将设置输入数据 x,权重 w 和偏置项 b。然我们来看看具体的初始化工作。如下:weights=model.layers[0].get_weights()w_init=weights[0][0][0]b_init=weights[1][0]print('Linear regression model is initialized with weights w:%.2f,b:%.2f'%(w_init,b_init))Linear regression model is initialized with weight w:-0.03,b:0.00现在,我们可以l利用自己构造的数据 trX 和 trY 来训练这个线性模型,其中 trY 是 trX 的3倍。因此,权重 w 的值应该是 3。我们使用简单的梯度下降来作为优化器,均方误差(MSE)作为损失值。如下:model.compile(optimizer='sgd',loss='mse')最后,我们使用 fit 函数来输入数据。model.fit(trX,trY,nb_epoch=200,verbose=1)在经过训练之后,我们再次打印权重:weights=model.layers[0].get_weights()w_final=weights[0][0][0]b_final=weights[1][0]print('Linear regression model is trained to have weight w:%.2f,b:%.2f'%(w_final,b_final))Linear regression model is trained to have weight w:2.94,b:0.08正如你所看到的,在运行 200 轮之后,现在权重非常接近于 3。你可以将运行的轮数修改为区间[100,300]之间,然后观察输出结构有什么变化。现在,你已经学会了利用很少的代码来构建一个线性回归模型,如果要构建一个相同的模型,在 TensorFlow 中需要用到更多的代码。5.使用 Keras 保存和回复预训练的模型HDF5 二进制格式一旦你利用Keras完成了训练,你可以将你的网络保存在HDF5里面。当然,你需要先安装..www.zgxue.com防采集请勿采集本网。

在网上搜过发现关于keras下的模型融合框架其实很简单,奈何网上说了一大堆,这个东西官方文档上就有,自己写了个demo:

Keras 是提供一些高可用的 Python API,能帮助你快速的构建和训练自己的深度学习模型,它的后端是 TensorFlow 或者 Theano。本文假设你已经熟悉了 TensorFlow 和卷积神经网络,如果,你还没有

# Function:基于keras框架下实现,多个独立任务分类# Writer: PQF# Time: 2019/9/29import numpy as npfrom keras.layers import Input, Densefrom keras.models import Modelimport tensorflow as tf# 生成训练集dataset_size = 128*3rdm = np.random.RandomState(1)X = rdm.rand(dataset_size,2)Y1 = [[int(x1+x2<1)] for (x1,x2) in X]Y2 = [[int(x1+x2*x2<0.5)] for (x1,x2) in X]X_train = X[:-2]Y_train1 = Y1[:-2]Y_train2 = Y2[:-2]X_test = X[-2:dataset_size]Y_test1 = Y1[-2:dataset_size]Y_test2 = Y2[-2:dataset_size]#网络一input = Input(shape=(2,))x = Dense(units=16,activation='relu')(input)output = Dense(units=1,activation='sigmoid',name='output1')(x)#网络二input2 = Input(shape=(2,))x2 = Dense(units=16,activation='relu')(input2)output2 = Dense(units=1,activation='sigmoid',name='output2')(x2)#模型合并model = Model(inputs=[input,input2],outputs=[output,output2])model.summary()model.compile(optimizer='rmsprop',loss='binary_crossentropy',loss_weights=[1.0,1.0])model.fit([X_train,X_train],[Y_train1,Y_train2],batch_size=48,epochs=200)print('x_test is :\n')print(X_test)print('y_test1 is :\n')print(Y_test1)print('y_test2 is :\n')print(Y_test2)predict = model.predict([X_test,X_test])print('prediction is : \n')print(predict[0])print(predict[1])

1、物理层:物理层是OSI参考模型的最低层,它利用传输介质为数据链路层提供物理连接。它主要关心的是通过物理链路从一个节点向另一个节点传送比特流,物理链路可能是铜线、卫星、微波或其他的通讯媒介。

补充知识:keras的融合层使用理解

TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。2、数据链路层:

最近开始研究U-net网络,其中接触到了融合层的概念,做个笔记。

5.及时更新的最新技术:我们将及时跟进学术界的动态,例如现在已经支持MSRA的ParametricRelu和Google的BatchNormalization6.Caffe模型转换:支持将训练好的Caffe模型直接转化为cxxnet模型(本周内上线!

上图为U-net网络,其中上采样层(绿色箭头)需要与下采样层池化层(红色箭头)层进行融合,要求每层的图片大小一致,维度依照融合的方式可以不同,融合之后输出的图片相较于没有融合层的网络,边缘处要清晰很多!

7、第1层物理层:在OSI参考模型的底部。常用设备包括网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆。基本功能:物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以实现比特流

这时候就要用到keras的融合层概念(Keras中文文档https://keras.io/zh/

文档中分别讲述了加减乘除的四中融合方式,这种方式要求两层之间shape必须一致。

重点讲述一下Concatenate(拼接)方式

拼接方式默认依照最后一维也就是通道来进行拼接

如同上图(128*128*64)与(128*128*128)进行Concatenate之后的shape为128*128*192

ps:

中文文档为老版本,最新版本的keras.layers.merge方法进行了整合

上图为新版本整合之后的方法,具体使用方法一看就懂,不再赘述。

以上这篇在keras下实现多个模型的融合方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持真格学网。

1、第一种方法,框选需组合物体抄,在菜单栏点击组,进入组选框并重命袭名组名称即可。2、第二种方法,选择一个物体百,点击右键度--选择转换为--转换为可编辑多边形。3、选择修改面板问-附加命令。4、附加命令会变成黄色,这时鼠标答点取需要附加的物体即可。5、最后多个物体组合在一起的效果,附加或者塌陷知··可编辑多边形右键出来的面板上面点有个attach 点你要附加到一起的另一个道模型·挨个挨个点· 塌陷就选中所有物体右边版面板有个锤头图标的点开权有个collapse点开点下面的collapse selected追问模型是由多个模型组合起来的 还有各种颜色 塌陷颜色的变成一个颜色 求大神帮我解决下 最好图文并茂,谢谢了追答?你是颜色还是给了材质?附加的话多个材质的就会变成多维材质··塌陷也是用于同样材质的物体上的·你要是想不变颜色怕是不行哦·除非是多个物体群组·但是群组的东西还是单个的·只是把单个物体编了个组而已····一个物体多个颜色给多维材质呗·只是不贴图调成颜色本回答被网友采纳,1.打开场景,选中要打组的模型。2.点击组-组。3.给组起名,点击确定完成内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 关于keras dense层整理
  • 使用keras预训练模型resnet50进行图像分类方式
  • keras使用imagenet上预训练的模型方式
  • 使用keras实现densenet和xception的模型融合
  • python判断变量是否为json格式的字符串示例
  • 详解如何在python中读写和存储matlab的数据文件(*.mat)
  • python实现按首字母分类查找功能
  • python实现的爬取豆瓣电影信息功能案例
  • python 浅谈serial与stm32通信的编码问题
  • pytorch 使用单个gpu与多个gpu进行训练与测试的方法
  • 浅谈python 四种数值类型(int,long,float,complex)
  • python中sets模块的用法实例
  • python将一个英文语句以单词为单位逆序排放的方法
  • python3用tkinter和pil实现看图工具
  • 3dmax 怎么把多个模型合并成一个整体
  • 如何从零开发一个复杂深度学习模型
  • icem中能否将多个之前做好的模型一起导入最后做成一个模型?
  • 使用keras +Tensorflow开发深度学习模型,进行细胞分割,关于细胞的label该怎么做?用什么工具?
  • 如何从零使用 Keras + TensorFlow 开发一个复杂深度学习模型?
  • OSI模型分为哪两个部分?
  • osi七层模型从下到上分为什么?
  • 如何从零使用 Keras + TensorFlow 开发一个复杂深度学习模型
  • OSI参考模型分哪几个层次?各层次基本功能是什么?
  • 瀑布模型的主要特征是什么
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页关于keras dense层整理使用keras预训练模型resnet50进行图像分类方式keras使用imagenet上预训练的模型方式使用keras实现densenet和xception的模型融合python判断变量是否为json格式的字符串示例详解如何在python中读写和存储matlab的数据文件(*.mat)python实现按首字母分类查找功能python实现的爬取豆瓣电影信息功能案例python 浅谈serial与stm32通信的编码问题pytorch 使用单个gpu与多个gpu进行训练与测试的方法浅谈python 四种数值类型(int,long,float,complex)python中sets模块的用法实例python将一个英文语句以单词为单位逆序排放的方法python3用tkinter和pil实现看图工具python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython科学计算环境推荐——anacpython逐行读取文件内容的三种方快速解决jupyter notebook启动需要密码的ubuntu18.04下python版本完美切换的解决方python实现随机生成手机号及正则验证手机python结巴中文分词工具使用过程中遇到的python 使用while写猜年龄小游戏过程解析编写python脚本抓取网络小说来制作自己的python 将有序数组转换为二叉树的方法使用python serial 获取所有的串口名称的pycharm代码无法复制,无法选中删除,无法编python 通过监听端口实现唯一脚本运行方式
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved