我遇到了CartPole问题。
购物车的输入需要0 or 1
作为输入;向左或向右移动。
假设我们的网络为4 inputs
加bias
,3 hidden layers
,每个1 neuron
和1 output
;哪里
所有权重在floats
之间随机0 and 1
,输入也将在floats
之间随机-10 and 10
。
因为我随机选择了所有内容,所以我固有地期望输出平均大约为0.5
,并且购物车将会向右移动。
事实并非如此;我大约平均得到0.63
。这导致了很大的问题,因为购物车从未决定向左走。 这似乎取决于每个隐藏层的神经元数量。
class NeuralNetwork(object):
def __init__(self):
self.inputLayerSize = 4
self.hiddenLayerCount = 3
self.hiddenLayerSize = 1
self.outputLayerSize = 1
#Initialize weights
self.W = []
self.W.append(np.random.rand(self.inputLayerSize + 1, self.hiddenLayerSize))
for _ in range(self.hiddenLayerCount - 1):
self.W.append( np.random.rand(self.hiddenLayerSize, self.hiddenLayerSize))
self.W.append( np.random.rand(self.hiddenLayerSize, self.outputLayerSize))
def forward(self, data):
layers = []
data = np.append(data, [1]) #ADD BIAS
layers.append(data)
for h in range(self.hiddenLayerCount + 1):
z = np.dot( layers[h], self.W[h] )
a = sigmoid(z)
layers.append(a)
return sigmoid( layers[self.hiddenLayerCount + 1] )
我通过用output
减去0.1
来解决问题,但这显然是在作弊;我认为使用0.1
作为某种神奇的数字没有数学上的理由。
我相信我正在接近这个问题,或者让我的一些代码搞砸了。任何帮助将不胜感激!