使用Pybrain构建的简单前馈网络未输出预期值

我尝试使用pybrain来输出RGB值。输入层接受一个RGB值数组,所有隐藏层都是线性模型。我原本期望网络能够输出RGB值。然而,网络的输出结果却是一个值数组,这些值远不在0到255的范围内。这些图像大约是25张公牛的.jpg图片。每张图片是一个长度为575280的扁平化数组。我希望网络能够收敛到一张最终看起来像公牛的图像。

import numpy as npfrom pybrain.structure import FeedForwardNetwork, LinearLayer, SigmoidLayer, GaussianLayer, TanhLayerfrom pybrain.structure import FullConnection, BiasUnitimport testabullbull_x = 510bull_y = 398bull_flat = 575280n = FeedForwardNetwork()bias_unit = BiasUnit()in_layer = LinearLayer(bull_flat)hidden_A = LinearLayer(5)hidden_B = LinearLayer(10)out_layer = LinearLayer(bull_flat)n.addInputModule(in_layer)n.addModule(hidden_A)n.addModule(hidden_B)n.addOutputModule(out_layer)n.addModule(bias_unit)in_to_hidden = FullConnection(in_layer, hidden_A)hidden_to_hidden = FullConnection(hidden_A, hidden_B)hidden_to_out = FullConnection(hidden_B, out_layer)bias_to_hidden = FullConnection(hidden_B, out_layer)n.addConnection(in_to_hidden)n.addConnection(hidden_to_hidden)n.addConnection(bias_to_hidden)n.addConnection(hidden_to_out)n.sortModules()bull_img_array = testabull.crop_the_bull_images('../../imgs/thebull/')trainable_array = [] ## an array of flattened imagesfor im in bull_img_array:    flat_im = np.array(im).flatten()    trainable_array.append(flat_im)print nprint n.activate(trainable_array[0])output = Nonefor a in trainable_array:    output = n.activate(a)print output, len(output) 

如果有人有任何建议,我将非常感激。


回答:

首先,这里有两个问题。首先,你需要将输出缩放到0到255之间。你可以在输出后进行一些转换来实现这一点。通过获取最大值和最小值,然后将它们转换到0到255之间。

另一方面,这个网络可能不会学习你希望它学习的内容,你的隐藏层使用的是线性层。这不太有用,因为权重本身就构成了线性变换。你最终得到的将是一个线性函数。 ftp://ftp.sas.com/pub/neural/FAQ2.html#A_act

我建议在隐藏层使用SigmoidLayer,这当然会将值压缩到0到1之间。你可以通过在输出层乘以255来纠正这一点。可以通过一个固定的层或者只是在输出后转换值来实现。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注