python - 将输入形状作为特征和标签数量的总和是否错误
问题描述
我尝试进行回归,我有 3 个特征和 1 个标签(它们都有 190 个条目)。我一开始用的input_shape=[len(dataset.keys())]
是4,效果很好。
现在我意识到我应该编写 input_shape= [len(training_dataset.keys())]
,即 3 并尝试多种不同大小的层和激活函数的组合,以找到最佳模型。
def build_model():
model = keras.Sequential([
layers.Dense(64, activation='elu', input_shape=[len(dataset.keys())]),
layers.Dense(64, activation='relu'),
layers.Dense(1)
])
optimizer = tf.keras.optimizers.RMSprop(0.001)
model.compile(loss='mse',
optimizer=optimizer,
metrics=['mae', 'mse'])
return model
结果很糟糕(平均错误率过去是 156,现在超过 4500)。那么我可以让它像一开始一样还是错的?
解决方案
根据数据集的类型,有更好的方法来提供列的数量。最简单和最直接的(至少对我而言)是:
Dense(12, activation='relu', input_dim=training_dataset.shape[1])
如果您的数据集是 Numpy 数组或 Pandas 数据框,这将对您有所帮助。
但是,由于您正在使用一个函数来构建模型,我鼓励您让它像
def build_model(input_dim):
model = keras.Sequential([
layers.Dense(64, activation='relu', input_dim=input_dim),
layers.Dense(64, activation='relu'),
layers.Dense(1)
])
optimizer = tf.keras.optimizers.RMSprop(0.001)
model.compile(loss='mse',
optimizer=optimizer,
metrics=['mae', 'mse'])
return model
因此,无论数据集的范围如何,您都可以对其进行修改和使用(假设您要构建具有相同功能的另一个模型,因为它只链接到一个数据集,所以它不起作用)。
至于性能下降,我敢打赌,您将标签作为训练数据集的一部分(我以前也遇到过),这创建了一个“完美”的模型。可能错误在于最后一层的激活函数或类似的东西,但我不会说它与那个形状有关。
编辑:我认为这是一个分类任务。
推荐阅读
- react-native - 在工作集函数中反应本机运行 useState/force 重新渲染
- datetime - 如何将日期和时间转换为谷歌表中的 unix 时间戳
- python - 如何使用 BeautifulSoup 在 Python 中将数据分块到多个字典中
- flutter - 我想在我的应用程序中添加搜索栏,但我收到了一些错误消息,如下所示
- python - ValueError:将 `Model` 与 `ParameterServerStrategy` 一起使用时,不支持 `run_eagerly`
- javascript - 为什么在while循环中声明变量时结果会发生变化?
- minecraft-forge - 我的模组在 alt+f4 时无法切换鼠标按钮。这是什么原因造成的,我该如何解决?
- html - 导航栏不再起作用
- python - 如何根据 pyplot 中的日期时间列设置我的点颜色?
- maven - 如何配置一组默认属性以在每个新的 Maven 项目中使用?