Encog输出的值小于0

时间:2019-03-09 11:00:31

标签: c# neural-network encog

我尝试训练网络对文本进行分类。在入口处,我仅提交了0和1之间的向量。一切正常:) 注意,Compute返回一个负值向量,例如{0.56,-0.09,-0.01}。只能有一个负值,也可以只有几个负值或无。

我在做什么错了?

inputSize = 360

outputSize = 3

<select name="categoryID" >
			<?php $catlist_sql="SELECT * FROM category";
				$catlist_qry=mysqli_query($con, $catlist_sql);
				$catlist_rs=mysqli_fetch_assoc($catlist_qry);
				do { ?>
					
		<option value="<?php echo $catlist_rs['categoryID']; ?>">
		<?php echo $catlist_rs['name']; ?></option>
					
<?php }	while ($catlist_rs=mysqli_fetch_assoc($catlist_qry));
		?></select>

Encog版本3.4.0

1 个答案:

答案 0 :(得分:0)

您的网络创建本身很好,尽管建议隐藏层中的神经元数量至少为一半,并且您可能会看到更高的精度(Bayramet等,2013)。

负值通常是造成网络不准确的原因,在训练网络时,您会看到均方误差(MSe),确保获得最低误差的一种好方法是:

//Train network on data set, parameters (Network, dataset, learning rate, momentum).
IMLTrain learner = new Backpropagation(EncogNetwork, data, lr, mom);
double lastError = double.PositiveInfinity;

//Training loop while error is decreasing by 0.0000001 or more every 1000 iterations.
do
{
     //Set last error as error if the network has trained before.
     if (learner.Error != 0)
     {
         lastError = learner.Error;
     }

     //Do 1000 learning iterations.
     int i = 0;
     while (i < 1000)
     {
          learner.Iteration();
          i++;
     }

} while (lastError - learner.Error > 0.0000001);

double error = learner.Error;

1.2中的错误很可能会产生差的结果。您还应该尝试学习速度和动力,以帮助降低误差。

在计算时,如果输入的值不正确或不相关,则很容易获得负输出。您所提供的信息量就是我所说的全部。