“意外缩进”或“对象没有属性'编译'”错误

时间:2018-08-14 21:21:49

标签: python tensorflow indentation

我正在关注Tensorflow教程,并进行了基本回归basic regression tutorial。当我进入“创建模型”部分时,以下代码给出了错误:

def build_model():
  model = keras.Sequential([
    keras.layers.Dense(64, activation=tf.nn.relu, 
                       input_shape=(train_data.shape[1],)),
    keras.layers.Dense(64, activation=tf.nn.relu),
    keras.layers.Dense(1)
  ])

  optimizer = tf.train.RMSPropOptimizer(0.001)

  model.compile(loss='mse',
                optimizer=optimizer,
                metrics=['mae'])
  return model

model = build_model()
model.summary()

我明白了

>>>   optimizer = tf.train.RMSPropOptimizer(0.001)
  File "<stdin>", line 1
    optimizer = tf.train.RMSPropOptimizer(0.001)
    ^
IndentationError: unexpected indent

如果我取消缩进optimizer = ...行,则下一行将给出相同的错误。因此,我取消了model.compile ...行的缩进,得到了这一点:

>>> model.compile(loss='mse',
...                 optimizer=optimizer,
...                 metrics=['mae'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'compile'

...之后是其他一系列错误,可能是该错误导致的。

其他教程效果很好。有人可以指出问题吗?

1 个答案:

答案 0 :(得分:0)

通过此错误消息行

  File "<stdin>", line 1

很明显,您是在此解释器的提示下直接将代码写到了Python 解释器

>>>

很明显您写了

  optimizer = tf.train.RMSPropOptimizer(0.001)

作为最高级别(模块)上的新命令,而不是功能定义中的一部分。

如何解决:

您必须在def build_model():提示符后编写>>>命令,并在...提示符后编写此函数定义的所有其他命令,并带有正确的缩进,直到{ {1}}命令。

(在return model命令之后,按两次 Enter 返回到return model提示符;然后继续编写其他命令。)