TensorFlow构建神经网络报错:TypeError: 'int'对象不可迭代
问题定位与解决方案:神经网络构建报错TypeError
问题场景
作为机器学习新手,使用Kaggle的Simple Gender Classification数据集(命名为gender_2),完成独热编码、数据归一化后,构建神经网络时触发报错:
TypeError: 'int' object is not iterable
报错指向代码中input_shape=139的设置,修改数值后问题仍存在。
错误原因
Keras的Dense层中,input_shape参数要求传入可迭代的结构(元组或列表),用来定义输入数据的维度。直接传入单个整数139时,Python会尝试遍历这个整数,导致"int不可迭代"的错误。
另外代码中还有一处拼写错误:tf.keras.losess.mae应该是tf.keras.losses.mae(多写了一个s),这会导致后续编译模型时也报错。
解决方案
- 修正
input_shape的写法,使用元组形式input_shape=(139,),末尾的逗号不能省略,用来明确这是一个单元素元组。 - 修正损失函数的拼写错误。
修正后的完整神经网络代码
tf.random.set_seed(42) # 修正input_shape为元组格式,修正losses拼写 model_gender_2 = tf.keras.Sequential([ tf.keras.layers.Dense(60, input_shape=(139,)), tf.keras.layers.Dense(30), tf.keras.layers.Dense(1) ]) model_gender_2.compile( loss = tf.keras.losses.mae, optimizer = tf.keras.optimizers.Adam(learning_rate = 0.01), metrics = ["mae"] ) model_gender_2.fit(X_train_normal_2, y_train, epochs = 120)
额外提示:如果不确定输入维度的准确值,可以通过X_train_normal_2.shape[1]动态获取,避免手动输入数值出错,写法如下:
tf.keras.layers.Dense(60, input_shape=(X_train_normal_2.shape[1],))
内容的提问来源于stack exchange,提问作者Adam Black
相关产品推荐
相关产品推荐

