如何在PyBrain中使用函数normalize()?

3

在训练之前,我需要对我的数据进行归一化处理。在pybrain.rl.environments.task中有一个名为normalize()的函数。但是我尝试了一下,它并没有起作用,只出现了错误。因此我不能使用这个函数来处理我的训练数据。

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import RPropMinusTrainer
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.networks import Network
from pybrain.rl.environments.task import Task
import numpy as np

ds = SupervisedDataSet(3, 1)

ds.addSample( (76.7, 13.8, 103.0), 770)
ds.addSample( (70.9, 13.0, 92.0), 650)
ds.addSample( (65.6, 15.9, 104.3), 713)
ds.addSample( (59.3, 14.8, 88.0), 593)
ds.addSample( (50.0, 13.0, 65.2), 443)
ds.addSample( (44.9, 17.6, 79.0), 547)
ds.addSample( (44.3, 18.4, 78.6), 553)
ds.addSample( (44.4, 18.4, 81.8), 576)

#create object for training data
test = Task(ds)

#set the normalization limits from 0 to 1
test.setScaling([(0, 1)], None)

#function call(problem here, I tried a lot of options for a function call, but none worked)
test.normalize((0, 1))

net = buildNetwork(ds.indim, 3, ds.outdim, bias = True, hiddenclass=TanhLayer)

trainer = BackpropTrainer(net, dataset=ds, verbose=False, learningrate = 0.01, momentum = 0.99)

trainer.trainOnDataset(ds,100)
trainer.testOnData(verbose=False)

我不理解在规范化函数中应该传递什么以及如何传递,使它正常工作。

1个回答

0

我知道这已经晚了很多,但在这里是我找到的东西。我猜setScaling接收要归一化的维度中min-max元组作为参数sensor_limits:

def setScaling(self, sensor_limits, actor_limits):
    self.sensor_limits = sensor_limits
    self.actor_limits = actor_limits

另一方面,normalize() 函数接收参数 sensors 中的实际维度,并使用 sensor_limits 中指定的元组(最小值-最大值)进行计算:
for l, s in zip(self.sensor_limits, sensors):
    if not l:
        result.append(s)
    else:
        result.append((s - l[0]) / (l[1] - l[0]) * 2 - 1.0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接