SKNN -第二次拟合时输入尺寸不匹配



我试图创建一个利用强化学习的神经网络。我选择scikit-neuralnetwork作为库(因为它很简单)。但是,两次匹配似乎会使Theano崩溃。

下面是导致崩溃的最简单的代码(注意,这与有哪些层无关,也与学习率或n_iter无关):

import numpy as np
from sknn.mlp import Classifier, Layer
clf = Classifier(
    layers=[
        Layer("Softmax")
        ],
    learning_rate=0.001,
    n_iter=1)
clf.fit(np.array([[0.]]), np.array([[0.]])) # Initialize the network for learning
X = np.array([[-1.], [1.]])
Y = np.array([[1.], [0.]])
clf.fit(X, Y) # crash

这里是我得到的错误:

ValueError: Input dimension mis-match. (input[0].shape[1] = 2, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{Mul}[(0, 1)](y, LogSoftmax.0)
Toposort index: 12
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(1L, 2L), (1L, 1L)]
Inputs strides: [(16L, 8L), (8L, 8L)]
Inputs values: [array([[ 1.,  0.]]), array([[ 0.]])]
Outputs clients: [[Sum{axis=[1], acc_dtype=float64}(Elemwise{Mul}[(0, 1)].0)]]

在Python 2.7.11中测试

sknn不支持多次拟合,还是我犯了一些愚蠢的错误?如果没有,你该如何实现强化学习?

我不经常使用sknn,但它与sklearn非常相似,所以我可能能够提供帮助!

首先,当使用fit方法时,您将重新初始化权重,如果您想根据新数据更新权重,您应该使用partial_fit方法。

关于崩溃,这是因为你的X数组在第一个维度而不是第二个维度是不同的形状。

import numpy as np
from sknn.mlp import Classifier, Layer
clf = Classifier(
    layers=[
        Layer("Softmax")
        ],
    learning_rate=0.001,
    n_iter=1)
# Original training data
X = np.array([[0.]])
Y = np.array([[0.]])
print X.shape, Y.shape
# Data used for second fitting
X = np.array([[-1.], [1.]])
Y = np.array([[1.], [0.]])
print X.shape, Y.shape

# Use the partial fit method to update weights
clf.partial_fit(X, Y) # Initialize the network for learning
clf.partial_fit(X, Y) # Update the weights

# Multiple training examples by stacking two on top of each other
X = np.concatenate((X, X))
Y = np.concatenate((Y, Y))
print X.shape, Y.shape
clf.partial_fit(X, Y)

输出:

(1, 1) (1, 1)
(2, 1) (2, 1)
(4, 1) (4, 1)

相关内容

  • 没有找到相关文章

最新更新