Tensorflow - TypeError: 'int' object is not iterable
Tensorflow - TypeError: 'int' object is not iterable
我收到一个错误,但它隐藏在 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 的新手,所以如果有人能找出我哪里出错了,我将不胜感激。谢谢。
参数 input_shape
应该是一个元组,即使输入张量是一维的。请改用 input_shape=(1000,)
。请注意,逗号对于确保 Python 将其解释为元组而不是单个整数很重要。
错误消息显示:TypeError: 'int' object is not iterable
。所以,我们代码中的 int
有问题,导致 Error
因为它是错误的 Type
.
我们自己的代码中堆栈跟踪中的最新行是:
model.add(LSTM(128, activation='relu', input_shape=1000, return_sequences=True))
这里仅有的 int
是 128
和 1000
。 128 是单位数,这样就可以了。 input_shape
不是;如果我们指定 numpy(或类似)数组的 "shape",那么我们需要一系列值 - 每个维度的大小一个。是的,即使是一维输入。
我们将其指定为 (1000,)
。
Keras 期望 input_shape
始终是一个 元组 ;对于单个值,它看起来像 (1000,)
.
然而,对于 LSTM,预期的完整形状 (batch_shape
) 是:(num_samples, timesteps, num_channels)
- 或等效地,(batch_size, timesteps, features)
。 input_shape
只是没有维度 0 的 batch_shape
- 即 (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')
。有关详细信息,请参阅 。
提示:可以肯定的是,运行 print(x_train.shape)
,并确保除了第一个 (dim 0) 之外的所有值都与您的 input_shape
.但是,我建议始终使用 batch_shape
而不是 input_shape
,除非应用程序涉及可变批处理大小 - 它使调试更容易。
对于您的 1D 示例,如果它 returns 类似于 (32, 1000)
,您需要添加一个维度使其成为 3D:x_train = np.expand_dims(x_train, -1)
(-1 = 最后一个轴)
我收到一个错误,但它隐藏在 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 的新手,所以如果有人能找出我哪里出错了,我将不胜感激。谢谢。
参数 input_shape
应该是一个元组,即使输入张量是一维的。请改用 input_shape=(1000,)
。请注意,逗号对于确保 Python 将其解释为元组而不是单个整数很重要。
错误消息显示:TypeError: 'int' object is not iterable
。所以,我们代码中的 int
有问题,导致 Error
因为它是错误的 Type
.
我们自己的代码中堆栈跟踪中的最新行是:
model.add(LSTM(128, activation='relu', input_shape=1000, return_sequences=True))
这里仅有的 int
是 128
和 1000
。 128 是单位数,这样就可以了。 input_shape
不是;如果我们指定 numpy(或类似)数组的 "shape",那么我们需要一系列值 - 每个维度的大小一个。是的,即使是一维输入。
我们将其指定为 (1000,)
。
Keras 期望 input_shape
始终是一个 元组 ;对于单个值,它看起来像 (1000,)
.
然而,对于 LSTM,预期的完整形状 (batch_shape
) 是:(num_samples, timesteps, num_channels)
- 或等效地,(batch_size, timesteps, features)
。 input_shape
只是没有维度 0 的 batch_shape
- 即 (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')
。有关详细信息,请参阅
提示:可以肯定的是,运行 print(x_train.shape)
,并确保除了第一个 (dim 0) 之外的所有值都与您的 input_shape
.但是,我建议始终使用 batch_shape
而不是 input_shape
,除非应用程序涉及可变批处理大小 - 它使调试更容易。
对于您的 1D 示例,如果它 returns 类似于 (32, 1000)
,您需要添加一个维度使其成为 3D:x_train = np.expand_dims(x_train, -1)
(-1 = 最后一个轴)