我正在编写一个简单的神经网络,但我想到了一个困扰我的问题。 此NN用于在输入中查找类别。为了更好地理解这一点,请说类别是"数字" (0,1,2 ...... 9)。
为实现此目的,输出层为10个节点。假设我用几个输入 - 输出对训练这个NN并将学到的权重保存在某个地方。由于学习过程需要花费很多时间,所以我会休息一下。第二天来新鲜,重新开始学习新的输入 - 输出对。如此公平,所以goo
但是如果在那个时候,我决定我想要识别十六进制(0,1,... 9,A,B ,,, E,F)......那么类别正在增加。
我怀疑这会暗示改变NN 的结构,因此我应该从头开始重新训练 NN。
这是这样吗?非常感谢任何评论,建议或您的经验分享
编辑:此问题已标记为重复。我读了另一个问题虽然相似,但我的问题更具体。虽然另一个问题具有普遍性,但答案也很普遍 - 我使用的例子非常具体:
如果我训练NN识别十进制数字,然后决定添加数据以使其识别十六进制数,那么这可能吗?怎么样?我是否需要重新训练整个NN?换句话说,自从开始以来,NN的结构是否需要保持静止,具有10 OR 16输出?
我非常感谢您对此的具体回答。感谢
答案 0 :(得分:1)
您的训练集和测试集应具有相同的分布
除非您有某种方法指定样本权重,例如某些算法,否则您应该不惜一切代价避免对有偏差的数据进行培训。对于机器学习而言,这不仅适用于神经网络。
从前一个会话恢复培训相当于使用良好的初始值
从技术上讲,您只是使用以前的网络作为初始值而不是随机值。您应该一如既往地在整个数据集中进行培训,以避免出现偏见的网络。
是的,如果通过重新训练,你应该总是重新训练你的网络,你的意思是用完整的数据集进行训练。
如果你只是意味着重新训练做了很长的训练迭代,那么无论如何都不是你的选择。您必须始终训练网络,直到训练错误和测试错误(或交叉验证错误)收敛为止。如果您重复使用以前训练过的网络,那么可能会更快。
你知道,不管是什么样的模式改变都是如此。如果您更改网络体系结构或数据集,或两者(您的示例)或其他一些参数。
当然,如果您更改网络架构,则在重用以前的网络时会遇到一些麻烦。您可以从保留的节点重用已学习的参数,并随机初始化新节点的参数。