首页 \ 问答 \ Keras替换输入层(Keras replacing input layer)

Keras替换输入层(Keras replacing input layer)

我拥有的代码(我无法更改)使用带有my_input_tensor作为input_tensor。

model1 = keras.applications.resnet50.ResNet50(input_tensor=my_input_tensor, weights='imagenet')

调查源代码 ,ResNet50函数使用my_input_tensor创建一个新的keras输入层,然后创建模型的其余部分。 这是我想用自己的模型复制的行为。 我从h5文件加载我的模型。

model2 = keras.models.load_model('my_model.h5')

由于此模型已经有一个输入层,我想用一个用my_input_tensor定义的新输入层替换它。

如何更换输入图层?


The code that I have (that I can't change) uses the Resnet with my_input_tensor as the input_tensor.

model1 = keras.applications.resnet50.ResNet50(input_tensor=my_input_tensor, weights='imagenet')

Investigating the source code, ResNet50 function creates a new keras Input Layer with my_input_tensor and then create the rest of the model. This is the behavior that I want to copy with my own model. I load my model from h5 file.

model2 = keras.models.load_model('my_model.h5')

Since this model already has an Input Layer, I want to replace it with a new Input Layer defined with my_input_tensor.

How can I replace an input layer?


原文:https://stackoverflow.com/questions/49546922
更新时间:2019-12-13 08:09

最满意答案

使用以下方法保存模型时:

old_model.save('my_model.h5')

它会节省以下内容:

  1. 模型的体系结构,允许创建模型。
  2. 模型的权重。
  3. 模型的训练配置(丢失,优化器)。
  4. 优化器的状态,允许训练从您之前离开的地方恢复。

那么,当你加载模型时:

res50_model = load_model('my_model.h5')

你应该得到相同的型号,你可以使用以下方法验证相同:

res50_model.summary()
res50_model.get_weights()

现在您可以弹出输入图层并使用以下命令添加自己的:

res50_model.layers.pop(0)
res50_model.summary()

添加新的输入图层:

newInput = Input(batch_shape=(0,299,299,3))    # let us say this new InputLayer
newOutputs = res50_model(newInput)
newModel = Model(newInput, newOutputs)

newModel.summary()
res50_model.summary()

When you saved your model using:

old_model.save('my_model.h5')

it will save following:

  1. The architecture of the model, allowing to create the model.
  2. The weights of the model.
  3. The training configuration of the model (loss, optimizer).
  4. The state of the optimizer, allowing training to resume from where you left before.

So then, when you load the model:

res50_model = load_model('my_model.h5')

you should get the same model back, you can verify the same using:

res50_model.summary()
res50_model.get_weights()

Now you can, pop the input layer and add your own using:

res50_model.layers.pop(0)
res50_model.summary()

add new input layer:

newInput = Input(batch_shape=(0,299,299,3))    # let us say this new InputLayer
newOutputs = res50_model(newInput)
newModel = Model(newInput, newOutputs)

newModel.summary()
res50_model.summary()
2018-03-29

相关问答

更多

来自Javascript的jQuery POST显示错误(jQuery POST from Javascript show error)

您可以将整个ajax代码放在一个函数中,并在单击该按钮时调用它。 执行http://jsfiddle.net/xmkn3mu4/1 ,打开一个源代码为abc.com的警报。 $(document).ready(function () { $('button').click(function(){ request(); }); }); function request() { var fromData = { "version": $

如何获得全系列的色阶?(How to get the full range of a colorscale?)

我还没有完全弄明白这一点,但似乎根据数据是由正数,负数还是混合数来选择颜色标准。 在我的情况下,当我的数字都是正数时,我只得到一个红色的颜色。 指定最小值和最大值没有帮助。 为了解决这个问题,我在剧情文档的帮助下定义了自己的色阶。 I haven't fully figured this one out, but plotly seems to select colorscales depending on whether the data consists of positive, negat

阅读png文件并输入cnn Tensorflow(Read a png file and feed a cnn Tensorflow)

这是正确的行为,因为在您的代码中,您只创建一个图形,并且TF在此步骤中不会真正读取png文件,但只会在会话中启动Graph时创建将执行此操作的操作。 操作结果是Tensor,形状未知(此刻)。 您可以调整大小或以预定义的大小裁剪它。 It is right behavior, because in your code you only create a graph, and TF doesn't realy read the png file on this step, but only cre

添加到输入表单部分(add to input form section)

只是, <input id ='name' type="text" name="name" value=""> $('#name').prop('required', true); 根据评论进行编辑 如果你想使用名称选择器/ id选择器进行单输入选择, $('input[name=name]').prop('required', true); 要对所有输入字段使用, $('input').each(function() { $(this).prop('required', true

网址:目录或带有扩展名的网页[已关闭](URL: Directory like or Pages with extension [closed])

这比建立网站更普遍。 对于您必须组织的大量文件,这是一个很好的做法。 https://stackoverflow.com/是Web服务器的根,只要Web服务器知道它就是文件系统的根目录(而不是过度复杂化虚拟主机等)。 stackoverflow.com/questions/将进入名为问题的目录。 通常这些目录将包含index.html或index.php以及主页面正常运行所需的一系列其他文件|脚本|页面。 我认为这不会影响您的排名。 如果您经常在网址栏中输入您想要的内容,而不是点击主站点上的链接

注册。(Reg. firewall in Linux)

防火墙中的第一条规则告诉iptables接受所有已建立的连接,因此您只能阻止新的连接 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 尝试删除该规则,看看会发生什么 The first rule in your firewall tells iptables to accept all established connections so you are only blocking new connections -A INPUT

将Jquery和React fb添加到html文件中(Adding Jquery and React fb to html file)

这是因为运行jquery时不会呈现按钮。 而不是像这样做你应该研究如何使用react做click事件: var Demo = React.createClass({ buttonClick: function() { // do stuff using this.setState(...) }, render:function(){ return ( <div id='bg1'> <div id='block1'> <h1>Martin Family "T

Perl中的“s!”运算符有什么作用?(What does the “s!” operator in Perl do?)

s!foo!bar! 与更常见的s/foo/bar/ ,只是foo和bar可以包含未转义的斜杠而不会导致问题。 它所做的是,它用bar代替了正则表达式foo的第一次出现。 带有g的版本将替换所有发生的事件。 s!foo!bar! is the same as the more common s/foo/bar/, except that foo and bar can contain unescaped slashes without causing problems. What it does

相关文章

更多

最新问答

更多
  • asp.net任意用户信息(asp.net arbitrary user info)
  • 如何使用python计算docx文件中表中行的值(How to count the row's values in tables in docx file by using python)
  • MySQL:用户访问和数据库覆盖(MySQL: User access and DB overwriting)
  • 还有另一种“使用未分配的局部变量”的问题(Yet Another “Use of unassigned local variable 'whatever' ” question)
  • 开源证书颁发机构软件(Open source certificate authority software)
  • Rails中的迭代form_for是在create上添加模型的所有实例(Iteration in Rails form_for is adding all instances of model on create)
  • 如何扩展我的表视图单元格?(How to expand my table view cell?)
  • 如何使用SPARQL区分Thing和无生命对象(How to differentiate between a Thing and an inanimate object with SPARQL)
  • 在IdentityServer中,Client Secrets和Scope Secrets有什么区别?(In IdentityServer, what is the difference between Client Secrets and Scope Secrets?)
  • 如何在具有附加类时重写类(How do I override a class when it has a attached class)
  • 如何使用Git在Azure上部署C#,MVC4应用程序(How to deploy a C#, MVC4 application on Azure using Git)
  • Sitecore 7内容搜索爬网程序根目录之外的索引项(Sitecore 7 Content Search indexing items outside of crawler root)
  • 我应该在线课程使用utf-8编码吗?(Should I use utf-8 encoding for an online course?)
  • 如何在Cucumber-JS步骤定义中使用Node-mysql连接到MySQL?(How to connect to MySQL using Node-mysql in a Cucumber-JS step definition?)
  • 在MVC 4中的google.maps.LatLng(lat,lon)中将JSON字符串值分配给纬度和经度(Assign the JSON string value to Latitude and Longitude in google.maps.LatLng(lat,lon) in MVC 4)
  • awk:通过特定的分隔符删除字符串(awk: remove strings by specific delimiter)
  • 如何测试Vista的应用程序(How to test app for Vista)
  • Elasticsearch聚合器 - 缺失值的工作原理(Elasticsearch aggregators - How missing values work)
  • 绘制datetime.date熊猫(Plot datetime.date pandas)
  • PostgreSQL作为WSO2 EI和APIM + IS的数据源(PostgreSQL as datasource for WSO2 EI and APIM+IS)
  • 如何使用bash在postgres中运行alter table脚本(How to run alter table script in postgres using bash)
  • 可能使用PHP阻止整个美国州访问我的网站?(Might it be possible to block an entire US state from accessing my site, using PHP?)
  • restangular删除并输入错误网:: ERR_NAME_NOT_RESOLVED(restangular remove and put error net::ERR_NAME_NOT_RESOLVED)
  • 常见问题解答的Modx(Revolution)搜索功能(Modx(Revolution) search function for FAQs)
  • Rubymine如何使用远程口译员和Git?(How Does Rubymine Work With Remote Interpreters and Git?)
  • prepareForSegue和PerformSegueWithIdentifier发件人(prepareForSegue and PerformSegueWithIdentifier sender)
  • postgrsql与PowerShell无提示安装问题(postgresql silent installation issue with powershell)
  • 比较两个greps的输出(Comparing output from two greps)
  • 使用.NET RIA Data Services删除Silverlight 3中的数据(Deleting data in Silverlight 3 with .NET RIA Data Services)
  • 此行中AND运算符的含义(meaning of the AND operator in this line)