自己编了一个感知机算法,前边的输出都没有问题,在第二十次循环的时候,原本结果该是[0.05,0.05,0.15],但是却出现了奇怪的结果
[ 5.00000000e-02 -1.38777878e-17 1.50000000e-01]
后面也有这种输出(x,y也是)
求大神告诉我为啥会出现这个结果呢?
import sys
import numpy as np
def cal(a):
if a>0:
o=1
else:
o=0
return o
input=np.array([[-1,0,0],[-1,0,1],[-1,1,0],[-1,1,1]])
t=np.array([0,0,0,1])
w=np.array([-0.1,-0.2,0.2])
weight=w.transpose()
index=range(3)
count=0
loop=0
while(1):
for i in range(4):
loop=loop+1;
a=input[i]
x=np.dot(a,weight)
print 'No loop',loop,'x=',x
y=cal(x)
print 'No. loop',loop,'y=',y
if y==t[i]:
count=count+1
else:
count=0
for n in range(3):
weight[n]=weight[n]+0.05*(t[i]-y)*a[n]
print weight
if count==4:
break
if count==4:
break
aa=np.array([ 0.1,-0.05,0.1]);
for n in range(3):
aa[n]=aa[n]+0.05*(1-0)*a[n]
print aa
梦想无需昭告天下2017-09-26 23:15:45
<?php
/**
* 認証コードカテゴリ
*/
$code= new Code();
$code->outImage();
class Code
{
protected $number;
protected $codeType;
protected $width;
protected $height;
protected $image;
protected $code;
public function __construct($number=4,$codeType=2,$width= 100,$height=30)
{
$this->number=$number;
$this->codeType=$codeType;
$this->width=$width;
$this ->height=$height;
$this->code=$this->createCode();
}
public function __get($name){
if ($name=='code' ) {
return $this->code;
}else{
return false;
}
}
public function __destruct(){
imagedestroy($this->image);
}
保護関数 createCode(){
switch ($this->codeType) {
case '0':
$code=$this->getNumberCode();
Break;
case ' 1':
$code=$this->getCharCode();
ブレーク;
ケース '2':
$code=$this->getNumberCharCode();
ブレーク;
デフォルト:
die("对不起,不支持该验证码类型!!!!");
}
return $code;
}
protected function getNumberCode(){
$str=join('',range (0, 9));
return substr(str_shuffle($str), 0,$this->number);
}
protected function getCharCode(){
$str=join('',range (a, z));
$str=$str.strtoupper($str);
return substr(str_shuffle($str), 0,$this->number);
}
protected function getNumberCharCode (){
$str1=join('',range(0, 9));
$str=join('',range(a, z));
$str=$str1.$str. strtoupper($str);
return substr(str_shuffle($str), 0,$this->number);
}
public function outImage(){
$this->createImage();
$this->fillBack();
$this->drawChar();
$this->drawDistrub();
$this->show();
}
保護された関数createImage(){
$this->image=imagecreatetruecolor($this->幅, $this->高さ);
}
保護関数 fillBack(){
imagefill($this-> image, 0, 0, $this->lightColor());
}
保護関数 lightColor(){
return imagecolorallocate($this->image, mt_rand(130,255), mt_rand(130,255), mt_rand (130,255));
}
protected function darkColor(){
return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
}
protected functiondrawChar(){
for ($i=0; $i <$this-> 番号; $i++) {
$Width=$this->幅/$this->数値;
$x=mt_rand($i*$Width+10,($i+1)*$Width-15);
$y=mt_rand(0,$this->height-18);
imagechar( $this->image, 6, $x, $y, $this->code[$i], $this->darkColor());
}
}
保護関数drawDistrub(){
for ($i=0; $i <300; $i++) {
$x=mt_rand(0,$this->width);
$y=mt_rand(0,$this-> height);
imagesetpixel($this->image, $x, $y, $this->lightColor());
}
}
protected function show(){
header("Content -Type:image/png");
imagepng($this->image);
}
}
?>