通过遵循Tensorflow的教程并阅读一些关于神经网络的基本内容,我使用Python和Tensorflow库构建了一个神经网络模型。
目前,我的“.csv”文件数据如下:
AT V AP RH PE14.96 41.76 1024.07 73.17 463.2625.18 62.96 1020.04 59.08 444.375.11 39.4 1012.16 92.14 488.5620.86 57.32 1010.24 76.64 446.4810.82 37.5 1009.23 96.62 473.926.27 59.44 1012.23 58.77 443.6715.89 43.96 1014.02 75.24 467.359.48 44.71 1019.12 66.43 478.4214.64 45 1021.78 41.25 475.98.....................................
目前,我设计的神经网络可以处理多个输入和多个输出。在上述数据中,我将前三列作为输入,接下来的两列作为输出。因此,一旦我训练了数据,如果我输入14.64,45,1021.78,我希望我的神经网络能够预测输出值41.25和475.98。以下是我的当前代码:
...
我的神经网络架构如下:1) 输入节点(n_inputs)和输出节点(n_classes)分别为3和2。2) 目前,我考虑了两个隐藏层,每层有20个节点。
我需要在以下几点上获得帮助:
1) 如何选择参数“training_epoch”、“learning_rate”和“batch_size”,以便获得更好的准确性?
2) 我对我的神经网络架构仍然不确定。建议使用多少个隐藏层?以及每个隐藏层中的节点数量是多少?
3) 如果在我的数据中,我想使用前两列作为输入,接下来的三列作为输出,那么我可以做哪些更改?我是否也需要更改我的整个架构?
4) 我对我的成本函数也感到不确定。哪一个更适合用于获得更好的准确性?
5) 另外,请告诉我,如果我遗漏了某些重要的参数,这些参数是否值得考虑!
提前感谢!
回答:
你提出的问题相当普遍,如果能发现这些问题的通用答案,那么数据科学家将不复存在,因为机器学习系统的构建过程将被自动化。
1,2,4. 学习率和epoch次数分别是:“越小越好”和“越多越好”。但在实践中,你还需要在宇宙热寂之前完成机器的训练。
通常,你会查看网络在训练数据集上的错误函数值。起初,网络从数据中学习,错误值随着每个epoch的增加而改善。过了一段时间后,网络从数据集中学到了所有能学到的东西,错误值不再改善。此后继续训练就没有意义了。如果错误值已经足够小以满足你的需求,你也可以提前结束训练。
学习率也可以根据错误值的变化来选择。学习率越高,网络完成学习的速度就越快,但如果学习率过高,网络可能会超过参数的最优值,随着时间的推移变得越来越差。因此,你需要在学习速度和准确性之间找到一个折衷。随着epoch计数的增加,降低学习率的情况并不少见。
你还使用了“准确性”这个词,但你首先需要根据你的问题定义它的含义。(实际上,它与成本函数紧密相关。)你描述的问题属于线性/非线性回归(与逻辑回归相对),对于这些问题,均方误差(你的代码中使用的)是常用的。那些交叉熵标准通常更适合分类问题。当然,如果你对数据有一定的领域专业知识,你可以为你的网络设计专门的成本函数。
关于网络的最佳结构没有单一答案。它的复杂性取决于你试图近似的函数。如果输入和输出数据之间的关系是线性的,那么你只需要一个神经元就足够了。一般来说,决定网络结构的任务本身就是一个优化问题。因此,你首先要留出一部分带有答案的测试数据,然后用剩余的数据训练你的网络,然后看看它在之前未见过的测试数据上的表现。你测试网络,修改它,训练它,再次测试。根据网络在训练和测试集上的表现,你决定下一步如何修改它。
3. 你需要更改输入和输出的数量。并且你需要重新训练网络。
此外,这些以及更多基本问题在互联网上的许多课程中都有覆盖,建议你参加这些课程。其中一个课程可以在这里找到。