java - 了解神经网络层、节点和点积

标签 java neural-network deep-learning

我通读了这个页面:http://neuralnetworksanddeeplearning.com/chap1.html更好地理解神经网络的工作原理。我想用 Java 创建一个没有反向传播或训练的简单前馈网络。

我不清楚的是网络中一层的每个“神经元”所涉及的数学。假设我有三层。第一层采用大小为 100 的输入 vector 。这是否意味着我的第一层将有 100 个神经元?这是否也意味着每个神经元的输入将是所有 100 个输入乘以权重的总和?这是我神经元激活函数的输入总和吗?

在本章中提到,神经元/感知器的所有输入的总和可以重新表示为输入 (x) 和权重 (w) 的点积。我可以将它们视为两个单独的 vector ,它们的点积为我 x1w1 x2w2 x3w3 .. 等等,但是 x1w1 + x2w2 + .. 的总和如何仍然等于点积?

最后,如果一个层应该有 100 个输入和 1000 个输出,这是否意味着该层实际上有 1000 个神经元并且每个神经元有 100 个输入?那么该层每个神经元输出 1 个值,从而给出 1000 个输出?

如果这些问题完全不正确或微不足道,我提前道歉,我已经在网上阅读了一些文档,这是我目前的理解,但是如果不问真正了解它的人就很难验证。如果您有其他资源或视频可以提供帮助,我们将不胜感激。

最佳答案

这是我在 stackOverflow 中的第一个答案,所以请放轻松。

如果我没理解你的问题,你想知道人工神经元背后的数学是如何工作的。神经元由以下列表中显示的 5 个组件组成。 (下标i表示第i个输入或权重。)

  1. 一组输入,xi。
  2. 一组权重,wi。
  3. 一个阈值,u。
  4. 激活函数 f。
  5. 单个神经元输出,y。

人工神经元的结构相当简单。

使用单位阶跃激活函数,您可以确定一组将产生以下分类的权重(和阈值): Click to view classification

看数字 4。激活函数 f。许多不同的功能可以发生,身份功能是最简单的。

神经元输出 Y,是将激活函数应用于输入加权和的结果,减去阈值

根据所使用的激活函数,该值可以是离散值或实数。

Here's具有特定函数 F 的 Y 的输出。

一旦计算出输出,就可以将其传递给另一个神经元(或一组神经元)或由外部环境采样。神经元输出的解释取决于所考虑的问题

@西弗尔

原则上,人工神经网络中可以使用的隐藏层数没有限制。可以使用“堆叠”或深度学习文献中的其他技术来训练此类网络。是的,你可以有 1000 个层,但我不知道你是否会得到很多好处:在深度学习中,我更经常看到 1-20 个隐藏层之间的某处,而不是 1000 个隐藏层。在实践中,层数基于实际考虑,例如,在合理的训练时间和不过度拟合的情况下,什么会导致良好的准确性。

您的问题: 我假设你的意思是说 100 个输入和 1000 个输出? 当一个输入接受加权值时,它的输出将它提供给下一层中的所有其他节点(神经元),但该值仍然来自给定节点。

有许多关于 Java 的“希望清洗”书籍,但如果您真的想进入它,请阅读 This

关于java - 了解神经网络层、节点和点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413247/

相关文章:

java - 由于某种原因,我的 Play 框架 Fastag 没有被选中

c# - 神经网络 OCR - 需要参数帮助 - Coursera Ng 的示例

neural-network - 如何在Tensorflow中应用Drop Out来提高神经网络的准确性?

python - 为什么我得到 AttributeError : 'KerasClassifier' object has no attribute 'model' ?

python - Google Colab 花费太多时间来训练分类器。如何解决这个问题?

java - java中元素递归计数的堆栈溢出

java - 使用play框架java从MySQL数据库中删除所有记录

deep-learning - 使用 TikZ 制作堆叠的 3D block

java - ID 必须存在于容器中或作为生成的列

machine-learning - 从不同布局的 PDF 文件中提取文本信息 - 机器学习