这个问题很难: 如何提供神经网络,动态输入?
回答这个问题肯定有助于现代人工智能的发展,使用深度学习计算机视觉和语音识别以外的应用程序。 我将进一步为神经网络的外行解释这个问题。
让我们举个例子:
假设您需要知道在“tic-tac-toe”游戏中获胜,失败或吸引的可能性。
所以我的输入可以是表示状态的[3,3]矩阵(1-You,2-Enemy,0-Empty):
[2. 1. 0.]
[0. 1. 0.]
[2. 2. 1.]
假设我们已经有一个以前训练过的隐藏层,一个[3,1]权重矩阵:
[1.5]
[0.5]
[2.5]
因此,如果我们使用一个简单的激活函数,它基本上由两个 y(x)= W * x 之间的矩阵相乘,我们在中得到这个[3,1]矩阵输出:
[2. 1. 0.] [1.5] [3.5]
[0. 1. 0.] * [0.5] = [0.5]
[2. 2. 1.] [2.5] [6.5]
即使没有softmax功能,你也可以判断出抽签的概率最高。
但是,如果我希望这个相同的神经网络能够用于5x5的井字游戏呢?
它具有与3x3相同的逻辑,它只是更大。神经网络应该能够处理它
我们会有类似的东西:
[2. 1. 0. 2. 0.]
[0. 2. 0. 1. 1.] [1.5] [?]
[2. 1. 0. 0. 1.] * [0.5] = [?] IMPOSSIBLE
[0. 0. 2. 2. 1.] [2.5] [?]
[2. 1. 0. 2. 0.]
但这种乘法无法计算。我们必须添加更多图层和/或更改之前训练过的和 RETRAIN 它,因为未经训练的权重(在这种情况下初始化为0)会导致神经网络失败,就像这样:
input 1st Layer output1
[2. 1. 0. 2. 0.] [0. 0. 0.] [6.5 0. 0.]
[0. 2. 0. 1. 1.] [1.5 0. 0.] [5.5 0. 0.]
[2. 1. 0. 0. 1.] * [0.5 0. 0.] = [1.5 0. 0.]
[0. 0. 2. 2. 1.] [2.5 0. 0.] [6. 0. 0.]
[2. 1. 0. 2. 0.] [0. 0. 0.] [6.5 0. 0.]
2nd Layer output1 final output
[6.5 0. 0.]
[5.5 0. 0.]
[0. 0. 0. 0. 0.] * [1.5 0. 0.] = [0. 0. 0.] POSSIBLE
[6. 0. 0.]
[6.5 0. 0.]
因为我们扩展了第一层并添加了一个零重量的新图层,所以我们的结果显然是不确定的。如果我们应用softmax函数,我们将意识到神经网络对于每个可能的结果返回33.3%的几率。 我们需要再次训练。
显然,我们想要创建能够适应不同输入大小的通用神经网络,但是我还没有想到解决这个问题的方法!所以我想也许stackoverflow可以帮助。成千上万的人比一个人更好。 有什么想法吗?
答案 0 :(得分:0)
除了将输入调整为固定大小之外,还有解决卷积神经网络的解决方案。
Spatial Pyramid Pooling允许您训练和测试具有可变大小图像的CNN,并通过引入动态池层来实现这一点,其中输入可以是任何大小,并且输出具有固定大小,然后可以送到完全连接的层。
汇集非常简单,每个维度定义了多个区域(例如7x7),然后图层在非重叠的7x7区域中拆分每个要素图,并在每个区域上进行最大池化,输出49元素矢量。这也适用于多种规模。