"unexpected indent" 或 "object has no attribute 'compile'" 错误

"unexpected indent" or "object has no attribute 'compile'" errors

我正在学习 Tensorflow 教程,并且已经开始进行基本回归 basic regression tutorial。当我来到Create the Model部分时,下面的代码报错:

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'

...接着是一堆其他错误,可能是由那个错误引起的。

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

通过这行报错信息

  File "<stdin>", line 1

很明显,您将代码直接写给了 Python 解释器 ,并根据该解释器的提示

>>>

很明显你写了

  optimizer = tf.train.RMSPropOptimizer(0.001)

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

如何修复:

您必须在 >>> 提示符之后编写 def build_model(): 命令,并且在 ... 提示符之后编写此函数定义的所有其他命令,缩进正确,最多return model 命令。

return model命令后,按两次回车返回>>>提示符,然后继续写其他命令。)