TensorFlow,“'module'对象没有属性'占位符'”

时间:2016-05-23 06:20:20

标签: python machine-learning tensorflow

我一直在尝试使用tensorflow两天,现在在python2.7和3.4中反复安装和重新安装它。无论我做什么,我在尝试使用tensorflow.placeholder()

时都会收到此错误消息

这是非常的样板代码:

tf_in = tf.placeholder("float", [None, A]) # Features

无论我做什么,我总会得到回溯:

Traceback (most recent call last):
  File "/home/willim/PycharmProjects/tensorflow/tensorflow.py", line 2, in <module>
    import tensorflow as tf
  File "/home/willim/PycharmProjects/tensorflow/tensorflow.py", line 53, in <module>
    tf_in = tf.placeholder("float", [None, A]) # Features
AttributeError: 'module' object has no attribute 'placeholder'

任何人都知道如何解决这个问题?

22 个答案:

答案 0 :(得分:36)

解决方案:不要使用&#34; tensorflow&#34;作为你的文件名。

请注意,您使用tensorflow.py作为文件名。我猜你写的代码如下:

import tensorflow as tf

然后你实际上导入了脚本文件&#34; tensorflow.py&#34;这是在你当前的工作目录下,而不是&#34;真正的&#34;来自Google的tensorflow模块。

以下是导入时搜索模块的顺序:

  
      
  1. 包含输入脚本的目录(或未指定文件时的当前目录)。

  2.   
  3. PYTHONPATH(目录名列表,   使用与shell变量PATH相同的语法。

  4.   
  5. 依赖于安装的默认值。

  6.   

答案 1 :(得分:8)

代替tf.placeholder(shape=[None, 2], dtype=tf.float32)使用类似 tf.compat.v1.placeholder(shape=[None, 2], dtype=tf.float32),如果您不想完全禁用v2。

答案 2 :(得分:7)

它也发生在我身上。我有张量流,它工作得很好,但是当我安装tensorflow-gpu时,前面的张量流出现了这个错误,然后我做了这3个步骤,它开始没有问题:

  1. 我从Anaconda中删除了tensorflow-gpu,tensorflow,tensorflow-base软件包。使用。 conda remove tensorflow-gpu tensorflow tensorflow-base
  2. 重新安装tensorflow。使用 conda install tensorflow

答案 3 :(得分:7)

如果在升级到TensorFlow 2.0后出现此错误,您仍然可以通过替换以下内容来使用1.X API:

import tensorflow as tf

作者

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

答案 4 :(得分:4)

避免在tensorflow = 2.0中使用以下删除的语句

导入̶t̶e̶n̶s̶o̶r̶f̶l̶o̶w̶作为TF X̶=̶̶t̶f̶.̶p̶l̶a̶c̶e̶h̶o̶l̶d̶e̶r̶(形状=̶[NONE,̶2]̶,̶DTYPE =̶t̶f̶.̶f̶l̶o̶a̶t̶3̶2̶)̶

您可以使用以下代码禁用v2行为

这个对我来说很完美。

import tensorflow.compat.v1 as tf

tf.disable_v2_behavior()
x = tf.placeholder(shape=[None, 2], dtype=tf.float32)

答案 5 :(得分:2)

似乎在版本2中删除了.placeholder(),.reset_default_graph()和其他版本。我使用Docker映像:tensorflow/tensorflow:latest-gpu-py3遇到了此问题,该映像会自动拉出最新版本。我在1.13.1中工作,并自动“升级到2”并开始收到错误消息。我通过更具体的图像来解决此问题:tensorflow/tensorflow:1.13.1-gpu-py3

更多信息可以在这里找到:https://www.tensorflow.org/alpha/guide/effective_tf2

答案 6 :(得分:2)

我也遇到了同样的错误。可能是由于tensorflow的版本。 安装tensorflow 1.4.0后,我从错误中得到了缓解。

pip install tensorflow==1.4.0

答案 7 :(得分:2)

出现错误是因为我们正在使用tensorflow版本2并且命令来自版本1。因此,如果我们使用:

tf.compat.v1.summary.(method_name)

可以使用

答案 8 :(得分:2)

您需要在tensorflow 2上使用keras模型,如此处

import tensorflow as tf
from tensorflow.python.keras.layers import  Input, Embedding, Dot, Reshape, Dense
from tensorflow.python.keras.models import Model

答案 9 :(得分:1)

run the tensorflow as tf
tf.disable_v2_behavior()

使用一次 tf.disable_v2_behavior() 之后,以下错误不再出现。

AttributeError: 'module' object has no attribute 'placeholder'

答案 10 :(得分:1)

请查看 Migrate your TensorFlow 1 code to TensorFlow 2

这些代码:

import tensorflow as tf
tf_in = tf.placeholder("float", [None, A]) # Features

需要在 TensorFlow 2 中进行如下迁移:

import tensorflow as tf
import tensorflow.compat.v1 as v1
tf_in = vi.placeholder("float", [None, A]) # Features

答案 11 :(得分:1)

import tensorflow.compat.v1 as tf

tf.disable_v2_behavior() 

有效。 我正在使用Python 3.7和Tensorflow 2.0。

答案 12 :(得分:1)

在现有python安装上安装张量流时,在Ubuntu 16LTS上面临同样的问题。

解决方法: 1.)从pip和pip3卸载tensorflow sudo pip uninstall tensorflow sudo pip3卸载tensorflow

2.)卸载python&amp; python3 sudo apt-get remove python-dev python3-dev python-pip python3-pip

3.)只安装一个版本的python(我使用的是python 3) sudo apt-get install python3-dev python3-pip

4.)将tensorflow安装到python3 sudo pip3 install --upgrade pip

对于非GPU张量流,请运行此命令

sudo pip3 install --upgrade tensorflow

对于GPU张量流,请在命令下运行 sudo pip3 install --upgrade tensorflow-gpu

建议不要安装GPU和vesorflow的vanilla版本

答案 13 :(得分:0)

最新版本2.0不支持占位符。 我使用命令conda remove tensorflow卸载了2.0。 然后我使用命令conda install -c conda-forge tensorflow=1.15.0安装了1.15.0。 1.15是版本1系列中的最新版本。您可以根据自己的意愿和要求进行更改。 要查看所有版本,请使用命令:conda search tensorflow。 它适用于Windows中的Anaconda3。

答案 14 :(得分:0)

导入旧版本的tensorflow而不是新版本

[https://inneka.com/ml/tf/tensorflow-module-object-has-no-attribute-placeholder/][1]

将tensorflow.compat.v1导入为tf tf.disable_v2_behavior()

答案 15 :(得分:0)

问题在于TensorFlow版本;您正在运行的是2.0或高于1.5的计算机,而placeholder仅适用于1.4

因此,只需卸载TensorFlow,然后使用1.4版再次安装即可,一切正常。

答案 16 :(得分:0)

如果您在tensorflow 2.0.0+上获得了此,则很可能是因为代码与新版本的tensorflow不兼容。

要解决此问题,请运行tf_upgrade_v2 script

tf_upgrade_v2 --infile=YOUR_SCRIPT.py --outfile=YOUR_SCRIPT.py

答案 17 :(得分:0)

在尝试升级tensorflow之后,我遇到了同样的问题,我通过重新安装Tensorflow和Keras解决了它。

pip uninstall tensorflow

pip uninstall keras

然后:

pip install tensorflow

pip install keras

答案 18 :(得分:0)

因为您不能在tensflow2.0版本中使用占位符,所以您需要使用tensflow1 *,或者需要更改代码以修复tensflow2.0

答案 19 :(得分:0)

如果您正在使用TensorFlow 2.0,则某些为tf 1.x开发的代码可能会起作用。您可以点击以下链接:https://www.tensorflow.org/guide/migrate

或者您可以通过以下方式安装tf的早期版本 pip3 install tensorflow ==版本

答案 20 :(得分:0)

尝试一下:

<<app_name>>.wsgi:application

或这个(如果您有GPU):

pip install tensorflow==1.14

答案 21 :(得分:0)

如果您错误地写了entity testbench1 is -- Port ( ); end testbench1; architecture Behavioral of testbench1 is component register_file1 is Port( clk : in STD_LOGIC; reset : in STD_LOGIC; w_en : in STD_LOGIC; w_data : in STD_LOGIC_VECTOR (63 downto 0); r_data1 : out STD_LOGIC_VECTOR (63 downto 0); r_data2 : out STD_LOGIC_VECTOR (63 downto 0); w_reg : in STD_LOGIC_VECTOR (4 downto 0); r_reg1 : in STD_LOGIC_VECTOR (4 downto 0); r_reg2 : in STD_LOGIC_VECTOR (4 downto 0); r_data19 : out STD_LOGIC_VECTOR (63 downto 0); r_data20 : out STD_LOGIC_VECTOR (63 downto 0); r_data21 : out STD_LOGIC_VECTOR (63 downto 0); r_data24 : out STD_LOGIC_VECTOR (63 downto 0)); end component; signal clk : STD_LOGIC := '0'; signal reset : STD_LOGIC := '0'; signal w_en : STD_LOGIC := '0'; signal w_data : STD_LOGIC_VECTOR (63 downto 0) := x"ABCDEF0123456789"; signal r_data1 : STD_LOGIC_VECTOR (63 downto 0) := x"0000000000000000"; signal r_data2 : STD_LOGIC_VECTOR (63 downto 0) := x"0000000000000000"; signal w_reg : STD_LOGIC_VECTOR (4 downto 0) := "00000"; signal r_reg1 : STD_LOGIC_VECTOR (4 downto 0) := "00000"; signal r_reg2 : STD_LOGIC_VECTOR (4 downto 0) := "00000"; signal r_data19 : STD_LOGIC_VECTOR (63 downto 0); signal r_data20 : STD_LOGIC_VECTOR (63 downto 0); signal r_data21 : STD_LOGIC_VECTOR (63 downto 0); signal r_data24 : STD_LOGIC_VECTOR (63 downto 0); begin uut: register_file1 PORT MAP ( clk => clk, reset => reset, w_en => w_en, w_data => w_data, r_data1 => r_data1, r_data2 => r_data2, w_reg => w_reg, r_reg1 => r_reg1, r_reg2 => r_reg2, r_data19 => r_data19, r_data20 => r_data20, r_data21 => r_data21, r_data24 => r_data24); process begin wait for 10 ns; clk <= not clk; w_en <= '1'; w_data <= x"0000000000000800"; w_reg <= "11000"; wait for 10 ns; clk <= not clk; w_en <= '0'; wait for 10 ns; clk <= not clk; w_en <= '1'; w_data <= x"000000000000000A"; w_reg <= "10011"; wait for 10ns; clk <= not clk; w_en <= '0'; wait for 10ns; clk <= not clk; w_en <= '1'; w_data <= x"0000000000000005"; w_reg <= "10100"; wait for 10ns; clk <= not clk; wait for 10ns; clk <= not clk; w_en <= '0'; r_reg1 <= "10011"; r_reg2 <= "10100"; wait for 10ns; clk <= not clk; wait for 10ns; clk <= not clk; w_en <= '1'; w_data <= x"000000000000000F"; w_reg <= "10101"; wait for 10ns; clk <= not clk; wait for 10ns; clk <= not clk; w_en <= '0'; r_reg1 <= "10101"; r_reg2 <= "11000"; wait for 10ns; wait; end process; end Behavioral; 一词,可能是错字。 在我的情况下,我将其拼写错误为placeholder并收到如下错误: placehoder