Python &引用;ValueError:形状不匹配“;基于神经网络的千层面误差分析

Python &引用;ValueError:形状不匹配“;基于神经网络的千层面误差分析,python,neural-network,theano,Python,Neural Network,Theano,我正在尝试创建一个基于theano/千层面的神经网络,它将(本质上)尝试进行多变量回归 守则的内容如下: train_value = train_df.values[:, 0] train_data = train_df.values[:, 1:] #print "train:", train_data.shape, train_label.shape #test_data = test_df.values #print "test:", test_d

我正在尝试创建一个基于theano/千层面的神经网络,它将(本质上)尝试进行多变量回归

守则的内容如下:

    train_value = train_df.values[:, 0]
    train_data = train_df.values[:, 1:]
    #print "train:", train_data.shape, train_label.shape


    #test_data = test_df.values
    #print "test:", test_data.shape


    train_data = train_data.astype(np.float)
    train_value = train_value.astype(np.int32)



    fc_1hidden = NeuralNet(
        layers = [  # three layers: one hidden layer
            ('input', layers.InputLayer),
            ('hidden', layers.DenseLayer),
            ('dropout', layers.DropoutLayer),
            ('output', layers.DenseLayer),
            ],
        # layer parameters:
        input_shape = (None, 36),  # 36 rows of data 
        hidden_num_units = 100,  # number of units in hidden layer
        dropout_p = 0.25, # dropout probability
        output_nonlinearity = softmax,  # output layer uses softmax function
        output_num_units = 10,  # 10 labels

        # optimization method:
        #update = nesterov_momentum,
        update = sgd,
        update_learning_rate = 0.001,
        #update_momentum = 0.9,

        eval_size = 0.1,

        # batch_iterator_train = BatchIterator(batch_size = 20),
        # batch_iterator_test = BatchIterator(batch_size = 20),

        max_epochs = 100,  # we want to train this many epochs
        verbose = 1,
        )

fc_1hidden.fit(train_data, train_value)
plot_loss(fc_1hidden)
这里,train_值只是我想要训练我的NN预测的1列(数值)数据,下面的57列(train_数据)是所有参数/值(所有数字),应适当加权以预测第一列中的值

但是,运行此脚本时,出现以下错误:

  Epoch  |  Train loss  |  Valid loss  |  Train / Val  |  Valid acc  |  Dur
--------|--------------|--------------|---------------|-------------|-------
Traceback (most recent call last):
  File "neuralnetwork.py", line 77, in <module>
    fc_1hidden.fit(train_data, train_value)
  File "/Users/spadavec/anaconda/lib/python2.7/site-packages/nolearn/lasagne.py", line 150, in fit
    self.train_loop(X, y)
  File "/Users/spadavec/anaconda/lib/python2.7/site-packages/nolearn/lasagne.py", line 188, in train_loop
    batch_train_loss = self.train_iter_(Xb, yb)
  File "/Users/spadavec/anaconda/lib/python2.7/site-packages/theano/compile/function_module.py", line 606, in __call__
    storage_map=self.fn.storage_map)
  File "/Users/spadavec/anaconda/lib/python2.7/site-packages/theano/compile/function_module.py", line 595, in __call__
    outputs = self.fn()
ValueError: Shape mismatch: x has 83 cols (and 29 rows) but y has 36 rows (and 100 cols)
Apply node that caused the error: Dot22(x_batch, W)
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(29, 83), (36, 100)]
Inputs strides: [(664, 8), (800, 8)]
Inputs values: ['not shown', 'not shown']
Epoch |列车丢失|有效丢失|列车/Val |有效acc | Dur
--------|--------------|--------------|---------------|-------------|-------
回溯(最近一次呼叫最后一次):
文件“neuralnetwork.py”,第77行,在
fc_1隐藏拟合(列数据、列值)
文件“/Users/spadavec/anaconda/lib/python2.7/site packages/nolearn/lasagne.py”,第150行,适合
自循环列车(X,y)
文件“/Users/spadavec/anaconda/lib/python2.7/site packages/nolearn/lasagne.py”,第188行,列车循环中
批量生产线损耗=自生产线(Xb,yb)
文件“/Users/spadavec/anaconda/lib/python2.7/site packages/theano/compile/function_module.py”,第606行,在调用中__
存储映射=self.fn.storage映射)
文件“/Users/spadavec/anaconda/lib/python2.7/site packages/theano/compile/function_module.py”,第595行,在调用中__
输出=self.fn()
ValueError:形状不匹配:x有83列(和29行),但y有36行(和100列)
导致错误的应用节点:Dot22(x_批次,W)
输入类型:[TensorType(浮点64,矩阵),TensorType(浮点64,矩阵)]
输入形状:[(29,83),(36,100)]
输入跨步:[(664,8),(800,8)]
输入值:[“未显示”、“未显示”]
我不确定它是从哪里得到这个形状的——我的数据都没有83列或83行。(注意:我试着改编了这个脚本,它最初是为了看人脸照片,猜测不同部位(眼睛、鼻子、嘴巴等)在哪里而写的。)


我已经用pybrain编写了一个更简单的版本(sans-dropout方法),但我正在尝试迁移到sklearn/lasagne/theano,因为它打开了更多的门

由于要进行回归,请确保正确设置输出类型:

output_nonlinearity = linear

你确定你还有10个输出单位吗?我在烤宽面条时经历了一些奇怪的行为。我认为API随着时间的推移已经发生了变化,并且包含了一些bug。我成功地使用了最新版本,并根据自己的需要对其进行了调整。

在调用
fit
之前,如果打印train\u data.shape,train\u value.shape,您会看到什么?(只是为了确认您正在以您认为的形式提供数据)