【问题标题】:Tensorflow - TypeError: 'int' object is not iterableTensorflow - TypeError:'int'对象不可迭代
【发布时间】:2020-02-26 08:26:05
【问题描述】:

我遇到了一个错误,但它隐藏在 TensorFlow 库中,所以我很难弄清楚我的模型出了什么问题。

我正在尝试将 RNN 与 LSTM 一起使用。我的模型如下所示:

model = Sequential()

    model.add(LSTM(128, activation='relu',
                   input_shape=1000, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(128, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(2, activation='softmax'))

    opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)

    model.compile(optimizer='rmsprop',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])

    model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))

我的训练数据是一个列表列表,每个列表包含 1000 个浮点数。比如x_train[0] =

[0.0, 0.0, 0.1, 0.25, 0.5, ...]

我收到此错误:

   File "C:\Users\bencu\Desktop\ProjectFiles\Code\Program.py", line 74, in FitModel
    input_shape=1000, return_sequences=True))
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\layers\recurrent_v2.py", line 881, in __init__
    **kwargs)
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\layers\recurrent.py", line 1007, in __init__
    super(DropoutRNNCellMixin, self).__init__(*args, **kwargs)
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\layers\recurrent.py", line 2541, in __init__
    **kwargs)
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\layers\recurrent.py", line 395, in __init__
    super(RNN, self).__init__(**kwargs)
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\training\tracking\base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "C:\Users\bencu\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 356, in __init__
    batch_input_shape = (batch_size,) + tuple(kwargs['input_shape'])
TypeError: 'int' object is not iterable

我对 ML 很陌生,所以如果有人能找出我哪里出错了,我将不胜感激。谢谢。

【问题讨论】:

    标签: python tensorflow keras lstm recurrent-neural-network


    【解决方案1】:

    Keras 期望 input_shape 始终是一个元组;对于单个值,它看起来像 (1000,)

    但是,对于 LSTM,预期的完整形状 (batch_shape) 是:(num_samples, timesteps, num_channels) - 或等效的 (batch_size, timesteps, features)input_shape 只是 batch_shape 没有维度 0 - 即 (timesteps, num_channels)。如果您的输入数据是单变量(例如一维序列),那么num_channels=1 - 因此:

    model.add(LSTM(128, activation='relu', input_shape=(1000, 1), return_sequences=True))
    

    最后,对于'binary_crossentropy',更好的输出层是Dense(1, activation='sigmoid')。如需更多信息,请参阅this answer


    提示:确保运行 print(x_train.shape),并确保除第一个 (dim 0) 之外的所有值都与您的 input_shape 匹配。但是,我建议始终使用 batch_shape 而不是 input_shape,除非应用程序涉及可变的批量大小 - 它使调试更加容易。

    对于您的 1D 示例,如果它返回类似 (32, 1000) 的内容,您需要添加一个维度以使其成为 3D:x_train = np.expand_dims(x_train, -1)(-1 = 最后一个轴)

    【讨论】:

    • 非常感谢。这解决了原来的问题。但是,我现在收到此错误:ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float).
    • @Cutter 不客气。听起来像是您的数据格式或安装版本的问题 - 无论如何,它超出了这个问题的范围。如果您对此错误提出新问题,可以在此处回复以通知我 - 我可以看看。
    • 感谢@OverLordGoldDragon。我尝试自己调查这个问题,但没有成功。我已经提出了一个后续问题,如果你能看看会很棒:) stackoverflow.com/questions/58636087/…
    • Tensorflow 1 出错。Tensorflow 2(版本:2.4.1),int 数的输入形状是可以的。
    【解决方案2】:

    错误消息显示:TypeError: 'int' object is not iterable。所以,我们的代码中的 int 有问题,这会导致 Error,因为它是错误的 Type

    堆栈跟踪中我们自己的代码中的最新行是:

    model.add(LSTM(128, activation='relu', input_shape=1000, return_sequences=True))
    

    这里唯一的ints 是1281000。 128 是单位数,所以没问题。 input_shape 不是;如果我们要指定一个 numpy(或类似)数组的“形状”,那么我们需要一个值序列——一个用于每个维度的大小。是的,即使是一维输入。

    我们将其指定为 (1000,)

    【讨论】:

      【解决方案3】:

      参数input_shape 应该是一个元组,即使输入张量是一维的。请改用input_shape=(1000,)。请注意,逗号对于确保 Python 将其解释为元组而不是单个整数很重要。

      【讨论】:

        猜你喜欢
        • 2017-09-11
        • 1970-01-01
        • 2023-01-22
        • 2018-10-25
        • 2018-09-29
        • 2015-04-06
        • 2013-10-31
        • 2018-03-14
        相关资源
        最近更新 更多