文章目录
目前无论是中文还是国外网站对于如何正确的导入keras,如何从tensorflow中导入keras,如何在pycharm中从tensorflow里导入keras,这几个问题都众说纷纭,往往是互相借鉴给出一个可用的解决方法,但没有更进一步的解释了。常见因为keras导入引发的问题有以下几个:
from tensorflow import keras: pycharm中使用keras相关的包没有自动补全from tensorflow.keras.layers import Conv2D: pycharm中如此导入会发生Cannot find reference 'keras' in '__init__.py | __init__.py'问题。首先需要说明的是上面两种问题其实并不能称之为“问题”,因为实际上这些代码都是可以运行的,并且如果在pycharm自带的python console里执行这些问题也都是不存在的, 只是由于编译器自带的bug1使得这些现象一再发生。如果您只是要求代码能运行即可,那可以关闭页面大胆的继续编程了,但要是想要解决这些不便,可以继续看下去。
首先给出这些问题的解决方法:
from tensorflow.python import kerasimport kerastf.keras.xxx来使用keras的相关函数; 首先我们要明确一个概念,keras只是一个前端的API,其后端的计算都要基于现有的计算引擎,比如Theano或者Tensorflow2,而如今Tensorflow已经成为了Keras的默认后端,后者也成为了前者的官方高级API,也就意味着当我们安装2.0+版本的Tensorflow时实际会自动安装Keras3,经笔者实测也确实如此。
那么当我们通过不同方式来导入keras时,我们到底在导入什么,不同导入方法导入的包是否有区别呢?以下分别通过包的导入路径及导入内容进行具体分析,为了更好理解其中内容,建议去学习python中import的相关知识4.
keras常用导入方法有以下几种
import keras
from tensorflow import keras
from tensorflow.python import keras
import tensorflow as tf
tf.keras
寻址到的包为venv\Lib\site-packages\keras\__init__.py,也就是找到了keras的安装路径,直接运行了__init__.py。但是keras这个包的init文件中并没有显式的导入keras包中的所有子包,只是显式导入了一部分比如Sequetial ,Model:
from keras import models
from keras.engine.input_layer import Input
from keras.engine.sequential import Sequential
from keras.engine.training import Model
在仅导入keras的情况下,pycharm窗口中我们无法使用其他的代码自动补全,比如keras.optimizers等等。但值得注意的是,刚刚我说的是没有“显式导入”,而实际上显式导入的这些py文件本身其实又导入了大部分keras所包含的函数,这就使得虽然我们写出keras.optimizers这样的语句在pycharm中无法不全、高亮,但运行起来是没有问题的,而在python console中运行也能够自动补全,其实这也算是pycharm的一个bug了。如果希望在窗口界面也能自动补全,就应该直接导入keras文件夹下的optimizer子文件夹:import keras.optimizer。
这一方法是执行了venv\Lib\site-packages\tensorflow\__init__.py,而该文件中的keras实际是从 keras.api._v2 中导入了keras,执行了\venvLib\site-packages\keras\api\_v2\keras\_init.py,而再进一步的查看它实际也只是个空壳,进一步的调用了\venvLib\site-packages\keras\api\_v2\keras文件夹下的其他子文件夹,虽然这些文件夹看起来十分唬人,和重写了所有方法一样,但实际上其下只包含着__init__文件,内容也只是from keras import xx,和1中的方没有区别,只是个重定位而已。因此我们可以推测,在2.0+的版本里使用tf.keras.xx和keras.xx实际上是等价的,而在以前的版本是否存在区别,亦或者独立安装的keras是否有区别,笔者尚未去证实。
执行了venv\Lib\site-packages\tensorflow\python\keras\__init__.py,这里的keras下包含了第一二种方法里导入的keras下属函数,是对1、2中方法的重写而不是重定位。而从5中回答可知,tf.python.keras是private的,提供给开发者使用的,并不建议普通用户来使用。
总结起来的话,1和2是等价的,3是独立的,查阅资料的说法是第三种方法不推荐使用,是供开发者使用的,后续更新可能随时修改,官方建议的用法是第二种。
这一方法和2是等价的,不同点在于在pycharm中使用这种方式书写可以实现代码的自动补全。
这篇报错处理花了挺长时间去搜集相关资料并且实际验证,最终弄明白了python的import原理和keras到底是以怎样的形式和tensorflow取得联系,也算是个挺大的收获,总结就是后续的代码直接import keras即可。当然还有一些不太明晰的地方,比如tf.python.keras和keras在通用函数的实现方面方面是否存在区别,又有着怎样的区别?
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub