神经网络输入/输出
有没有人能给我解释一下,怎么处理更复杂的数据集,比如团队统计、天气、骰子、复杂的数字类型?
我明白所有的数学原理和运作方式,只是不知道怎么输入这些复杂的数据,然后又该怎么读取它输出的结果。
如果有人能提供一些Python的例子,那就太好了。
4 个回答
0
更复杂的数据通常意味着在输入层和输出层增加更多的神经元。
你可以把每个“字段”都转化成一个真实的数值(比如经过标准化处理等),然后把这些数值输入到每个神经元里。或者你甚至可以把数据拆分得更细,把每个字段分成比特位,给神经元输入饱和的1或0。至于输出部分,这就要看你是怎么训练神经网络的,它会努力模仿你用来训练的那些数据的输出结果。
2
你的特征需要拆分成可以用真实数字表示的部分。神经网络的神奇之处在于,它就像一个黑箱,在训练过程中会自动找到正确的关联(通过内部的权重)。
输入
选择尽可能少的特征来准确描述情况,然后把每个特征拆分成一组真实的数字。
- 天气: [今天的温度,今天的湿度,昨天的温度,昨天的湿度...] 今天的温度和今天的湿度之间的关系会在内部建立
- 团队统计: [平均身高,平均体重,最高身高,最高得分,...]
- 骰子: 这个我不太明白,你是说如何编码离散值吗?*
- 复数: [a,ai,b,bi,...]
* 离散值特征比较复杂,但仍然可以编码为 (0.0, 1.0)。问题是它们没有提供学习阈值的梯度。
输出
你决定输出的含义,然后把你的训练示例按照这个格式编码。输出值越少,训练起来就越简单。
- 天气: [明天下雨的概率,明天的温度,...] **
- 团队统计: [获胜的概率,获胜超过20分的概率,...]
- 复数: [x,xi,...]
** 在这里,你的训练向量会是:如果第二天下雨就是1.0,如果没下雨就是0.0。
当然,问题是否真的可以用神经网络来建模是另一个问题。
3
你需要把输入和输出转换成神经网络可以理解的格式。比如说,如果你想表示“x具有某种属性p”,可以用1来表示;如果表示“x没有属性p”,就用-1来表示(前提是你的神经元的输出范围在[-1, 1]之间)。
你如何编码输入和解码输出,取决于你想让神经网络学习什么内容。
而且,不同的任务有很多种“神经网络”算法和学习规则,比如反向传播、玻尔兹曼机、自组织映射等。