Professional Documents
Culture Documents
3 1.2.1. Khi nim mng Neural.................................................4 1.2.2. Phn loi mng Neural..................................................5 1.3. C s l thuyt pht trin ng dng....................................6 1.3.1. Cu trc mng Neural...................................................6 1.3.2. Hm hot ng.............................................................7 1.3.3. Tin trnh hc................................................................8 1.3.4. Gii thut Back Propagation.....................................10 CHNG 2: NG DNG MNG NEURAL NHN DNG HNH HC.15 2.1. Gii thiu bi ton.............................................................15 2.2. Pht biu bi ton.............................................................15 2.3. Gii quyt bi ton nhn dng hnh khi trn c s mng nron nhn to ........................................................................ 16 CHNG 3: CI T CHNG TRNH TH NGHIM...................17 3.1. M ngun..........................................................................17 3.1.1. Lp PatternRecognition...............................................17 3.1.2. Lp ImageProcessing..................................................22 3.2. Giao din chng trnh......................................................25 3.2.1. Giao din chnh...........................................................25 3.2.2. Giao din chc nng hun luyn ca chng trnh......25 3.2.3. D liu thu c sau khi hun luyn mng.................26 KT LUN................................................................................... 27
LI NI U
Cng vi s pht trin ca m hnh kho d liu (Dataware house), Vit nam ngy cng c nhiu kho d liu vi lng d liu rt ln. khai thc c hiu qu nhng d liu khng l ny, c nhiu cng c c xy dng tha mn nhu cu khai thc d liu mc cao, chng hn nh cng c khai thc d liu Oracle Discoverer ca hng Oracle. Cng c ny c s dng nh mt b phn tch d liu a nng theo nhiu chiu d liu, c bit theo thi gian. Hay l vic xy dng cc h chuyn gia, cc h thng da trn mt c s tri thc ca cc chuyn gia, c th d bo c khuynh hng pht trin ca d liu, thc hin cc phn tch trn cc d liu ca t chc. Mc d cc cng c, cc h thng trn hon ton c th thc hin c phn ln cc cng vic nu trn, chng vn yu cu mt chnh xc, y nht nh v mt d liu c th a ra c cc cu tr li chnh xc. Trong khi , cc ng dng ca mng nron truyn thng c xy dng da trn cc nhn t nh hng n s thay i ca d liu c thc tin chng minh l kh mnh v hiu qu trong cc bi ton d bo, phn tch d liu v nhn dng. Chng c th c hun luyn v nh x t cc d liu vo ti cc d liu ra m khng yu cu cc d liu phi y . Trong s cc loi mng tng i ph bin th cc mng neuron truyn thng nhiu lp, c hun luyn bng thut ton lan truyn ngc c s dng nhiu nht. Cc mng nron ny c kh nng biu din cc nh x phi tuyn gia u vo v u ra, chng c coi nh l cc b xp x a nng. Vic ng dng ca loi mng ny ch yu l cho vic phn tch, nhn dng, d bo, phn loi cc s liu thc t. Bi tp ln ny c thc hin vi mc ch tm hiu v lm sng t mt s kha cnh v mng nron truyn thng nhiu lp, thut ton lan truyn ngc v ng dng chng trong gii quyt cc bi ton trong vic nhn dng hnh khi.
Mng n ron nhn to l mt m phng x l thng tin, c nghin cu ra t h thng thn kinh ca sinh vt, ging nh b no x l thng tin. N bao gm s lng ln cc mi gn kt cp cao x l cc yu t lm vic trong mi lin h gii quyt vn r rng. ANNs ging nh con ngi, c hc bi kinh nghim, lu nhng kinh nghim hiu bit v s dng trong nhng tnh hung ph hp. u tin ANN c gii thiu nm 1943 bi nh thn kinh hc Warren McCulloch v nh logic hc Walter Pits. Nhng vi nhng k thut trong thi gian ny cha cho php h nghin cu c nhiu. Nhng nm gn y m phng ANN xut hin v pht trin. Cc nghin cu ng dng c thc hin trong cc ngnh: in, in t, k thut ch to, y hc, qun s, kinh t...v mi nht l cc nghin cu ng dng trong lnh vc qun l d n xy dng. Ti Vit Nam vic nghin cu ng dng ANN vo qun l xy dng ch mi bt u trong vi nm gn y v cn c pht trin.
1.3.1.
cu to nn mng neural.
uk
F (.)
output yk
xi: cc tn hiu input wkp: trng s ca tng input f(.): hm hot ng yk: kt xut ca Neural b: thng s nh hng n ngng ra ca output
neuron
Output 1 Output 2
Output 3 Input Hidden Layer Hnh 3: Cu trc mng neural nhiu lp Output
Mng neural nhiu lp c th gii quyt cc bi ton phi tuyn nh vo cc lp n. Cc lp n ny xen gia cc input bn ngoi v output ca mng. Cng nhiu lp n th kh nng m rng thng tin cng cao v x l tt mng c nhiu input v output. Ngoi ra cn c mng hi quy v mng Neural dng li.
1.3.2.
Hm hot ng Cc hm hot ng phi c cc c tinh sau: Hm b chn trn v chn di Hm c tnh n iu Hm phi c tnh lin tc v trn
1.3.3.
Tin trnh hc Tin trnh hc l tin trnh quan trng ca con ngi, nh hc m b no ngy
cng tch lu nhng kinh nghim thch nghi vi mi trng v x l tnh hung tt hn. Mng neural xy dng li cu trc b no th cn phi c kh nng nhn bit d liu thng qua tin trnh hc, vi cc thng s t do ca mng c th thay i lin tc bi nhng thay i ca mi trng v mng neural ghi nh gi tr .
teach/use X1 W1
X2 Inputs
W2 Output
X3
Wn
Trong qu trnh hc, gi tr u vo c a vo mng v theo dng chy trong mng to thnh gi tr u ra. Tip n l qu trnh so snh gi tr to ra bi mng Neural vi gi tr ra mong mun. Nu hai gi tr ny ging nhau th khng thay i g c. Tuy nhin, nu c mt sai lch gia hai gi tr ny vt qu gi tr sai s mong mun th i ngc mng t u ra v u vo thay i mt s kt ni. y l mt qu trnh lp lin tc v c th khng dng khi khng tm cc gi tr w sao cho u ra to bi mng Neural bng ng u ra mong mun. Do trong thc t ngi ta phi thit lp tiu chun da trn mt gi tr sai s no ca hai gi tr ny, hay da trn mt s ln lp xc nh. tin cho vic trnh by, ta k hiu y l gi tr kt xut ca mng Neural, t l gi tr ra mong mun, e l sai lch gia hai gi tr ny: e=ty
1.3.4.
Thut ton Back Propagation c s dng iu chnh cc trng s kt ni sao cho tng sai s E nh nht.
E = (t (xi, w) y (xi))2
i=1
Trong : t (xi, w): gi tr ca tp mu y (xi): gi tr kt xut ca mng Trc tin , ta xt trn 1 Neural, mi Neural u c gi tr vo v ra, mi gi tr u c mt trng s nh gi mc nh hng ca gi tr vo . Thut ton Back Propagation s iu chnh cc trng s gi tr ej = Tj yj l nh nht. Trc ht ta phi xc nh v tr ca mi neuron. Neuron no l ca lp n v neuron no l ca lp xut. Ta cn bit cc k hiu: wij: vector trng s ca neuron j s u vo i uj: vector gi tr kt xut ca neuron trong lp j
x1 Wij x2 W2j xi 1 x3
W
tj
fj (.)
sum
ej
E (n) =
-
1 e2j (n) 2 j =1
Gi tr kt xut ca neuron j:
yj (n) = fj (uj(n))
- Tnh ton gi tr o hm sai s cho mi neuron wij
Gi tr iu chnh trng s:
Nh vy qu trnh iu chnh trng s c th c xc nh theo cc cng thc trn, tuy nhin ta cn phi xc nh v tr ca neuron thuc lp no (lp n hay lp xut). iu ny rt quan trng trong vic tnh ton cho tng h s iu chnh trng s.
Nh vy tu theo hm hot ng ta c th tnh d dng tnh ton cc gi tr iu chnh trng s cho tng trng s tng ng theo thut ton Back Propagation.
CHNG 2:
tng bi ton : Phn tch nh cho hnh khi: Chia nh theo dng v tch k t theo tng vng gii hn Chuyn i hnh nh sang ma trn im nh. Chuyn thnh ma trn tuyn tnh v a vo mng neural. a v mng neural tnh gi tr u ra. Lu cc b trng s va thu c sau khi hc.
2.3. Gii quyt bi ton nhn dng hnh khi trn c s mng nron nhn to
C hai cch c bn nhn dng nh u vo. Th nht l xy dng hm biu din cho cc hnh khi, ri t hm biu din h thng nhn ra c im hm phn loi hnh. Ta bit, mi hnh c bn u c hm c trng ring, v d hnh trn l hm: a.x2+b.y2 = R2, nu coi 2 bin lin k ca nh l mt h ta th ta hon ton c th tnh ton c ta cc im trong hnh, t mt lot ta ca cc im nh, vi phng php ni suy gn ng ta c th a ra mt hm gn ng ca hnh khi, t m nhn dng c chng. Phng php th hai l tch ly cc c trng v cu trc cua nh nh: s chu trnh, s im ni (chc 3, chc t), im kt thc, im ngot,. vi cc u vo l cc c trng trn, sau mt qu trnh hun luyn, mng nron s nhn ra cc c trng ring ca mi i tng m phn loi. Trc ht l chn phng php nhn dng. trong bi ton ny, phng php nhn dng theo hm l khng hp l, bi php ni suy v hm ph hp vi cc ng cong khng khp kn v u ra l cc a thc. Cc hnh khi m chng ta nhn dng l cc ng khp kn v khng lin tc nn hm u ra khng th l cc
a thc m l nhng hm rt phc tp. Do chng ta s chn phng php trch chn c trng gii quyt bi ton ca chng ta. Tip n l vic chn tp cc c trng. c trng thng dng v n gin c nhiu chng trnh ng dng v thnh cng chnh l cc gi tr im nh. u im ca c trng ny l khu trch chn c trng s khng phc tp m c gim thiu thnh vic c cc gi tr cc im nh ri m ha thnh gi tr u vo cho mng nron. nh s c nn li gim s nron ca mng nhm tng tc tnh ton ca mng. Trong bi ton ny, kch c nh sau khi nn c chn l: 16x12 im nh, do , u vo ca mng l mt lp gm 192 nron. Lp u ra c 7 nron ng vi 7 hnh phn loi. Lp n c 160 nron.
Lp PatternRecognition
using System; namespace NhanDang { class PatternRecognition { #region Variables private int numberInput; private int numberHidden; private int numberOutput; private double n; //H s hc private double[] arrDataInput; //D liu a vo private double[,] arrWInput; //mng lu trng s gia lp u vo v lp n private double[,] arrWOutput; //mng lu trng s gia lp n v lp ra private double[] arrDataOutput; //mng lu d liu u ra private double[] arrValueHidden; // mng gi tr lp n private double[] arrOutputError; // mng lu sai s ca lp ra private double[] arrHiddenError; //mng lu sai s ca lp n private double[] arrDesiredOuput; //mng dng lu u ra ng hoc gi tr u ra c hc #endregion #region Properties public double[] ArrDataInput {
get { return arrDataInput; } set { this.arrDataInput = value; } } public double[,] ArrWInput { get { return arrWInput; } set { this.arrWInput = value; } } public double[,] ArrWOutput { get { return arrWOutput; } set { this.arrWOutput = value; } } public double[] ArrDesiredOuput { get { return arrDesiredOuput; } set { this.arrDesiredOuput = value; } } #endregion #region Contructor public PatternRecognition(int numberInput, int numberHidden, int numberOutput, double n) { this.numberInput = numberInput; this.numberHidden = numberHidden; this.numberOutput = numberOutput; this.arrDataInput = new double[numberInput]; this.arrWInput = new double[numberInput, numberHidden]; this.arrWOutput = new double[numberHidden, numberOutput];
this.arrDataOutput = new double[numberOutput]; this.arrValueHidden = new double[numberHidden]; this.arrOutputError = new double[numberOutput]; this.arrHiddenError = new double[numberHidden]; this.arrDesiredOuput = new double[numberOutput]; this.n = n; InitializeW(); //Khi to trng s ngu nhin } /// <summary> /// Khi to lp khng c trng s lp n v lp ra /// </summary> /// <param name="numberInput">S phn t lp Input</param> /// <param name="numberHidden">S phn t lp n</param> /// <param name="numberOutput">S phn t lp ra</param> /// <param name="arrDataInput">Mng lu 1 mu hc</param> /// <param name="arrDesiredOuput">Mng lu u ra ng ca mu</param> public PatternRecognition(int numberInput, int numberHidden, int numberOutput, double[] arrDataInput, double[] arrDesiredOuput, double n) { this.numberInput = numberInput; this.numberHidden = numberHidden; this.numberOutput = numberOutput; this.arrDataInput = arrDataInput; this.arrWInput = new double[numberInput, numberHidden]; this.arrWOutput = new double[numberHidden, numberOutput]; this.arrDataOutput = new double[numberOutput]; this.arrValueHidden = new double[numberHidden]; this.arrOutputError = new double[numberOutput]; this.arrHiddenError = new double[numberHidden]; this.arrDesiredOuput = arrDesiredOuput; this.n = n; InitializeW(); //Khi to trng s ngu nhin } /// <summary> /// Khi to lp khng c trng s lp n v lp ra /// </summary> /// <param name="numberInput">S phn t lp Input</param> /// <param name="numberHidden">S phn t lp n</param> /// <param name="numberOutput">S phn t lp ra</param> /// <param name="arrDataInput">Mng cha 1 mu hc</param> /// <param name="arrDesiredOuput">Mng cha u ra ng ca mu</param> /// <param name="arrWInput">Mng cha b trng s gia lp vo v lp n c hc trc </param> /// <param name="arrWOutput">Mng cha b trng s gia lp n v lp ra uc hc trc </param> public PatternRecognition(int numberInput, int numberHidden, int numberOutput, double[] arrDataInput, double[] arrDesiredOuput, double[,] arrWInput, double[,] arrWOutput, double n) { this.numberInput = numberInput; this.numberHidden = numberHidden; this.numberOutput = numberOutput; this.arrDataInput = arrDataInput; this.arrWInput = arrWInput; this.arrWOutput = arrWOutput; this.arrDataOutput = new double[numberOutput]; this.arrValueHidden = new double[numberHidden];
this.arrOutputError = new double[numberOutput]; this.arrHiddenError = new double[numberHidden]; this.arrDesiredOuput = arrDesiredOuput; this.n = n; } /// <summary> /// Hm khi to cc trng s ngu nhin /// </summary> public void InitializeW() { Random ra = new Random(); for (int i = 0; i < numberInput; i++) { for (int j = 0; j < numberHidden; j++) { arrWInput[i, j] = ra.NextDouble() * (ra.Next(0, 2) == 1 ? -1 : 1); } } for (int i = 0; i < numberHidden; i++) { for (int j = 0; j < numberOutput; j++) { arrWOutput[i, j] = ra.NextDouble() * (ra.Next(0, 2) == 1 ? -1 : 1); } } } #endregion #region Methods public void CalculatedValueHidden()//Tnh gi tr xut ca nt n { for (int i = 0; i < numberHidden; i++) { double num = 0; for (int j = 0; j < numberInput; j++) { num += arrDataInput[j] * arrWInput[j, i]; } arrValueHidden[i] = 1.0 / (1.0 + Math.Exp(-num)); } } public void CalculatedValueOutput()//Tnh gi tr xut cho nt xut { for (int i = 0; i < numberOutput; i++) { double num = 0; for (int j = 0; j < numberHidden; j++) { num += arrValueHidden[j] * arrWOutput[j, i]; } arrDataOutput[i] = 1.0 / (1.0 + Math.Exp(-num)); } } public void CalculatedErrors()// Tnh ton sai lch {
for (int i = 0; i < numberOutput; i++)// sai lch ca neural lp ra { arrOutputError[i] = arrDataOutput[i] * (1 - arrDataOutput[i]) * (arrDesiredOuput[i] - arrDataOutput[i]); } for (int i = 0; i < numberHidden; i++)// sai lch ca noeural lp n { double deltal = 0; for (int j = 0; j < numberOutput; j++) { deltal += arrWOutput[i, j] * arrOutputError[j]; } arrHiddenError[i] = arrValueHidden[i] * (1 - arrValueHidden[i]) * deltal; } } public void UpdateNewWeights() { for (int i = 0; i < numberHidden; i++)//Cp nht trng s neural u ra { for (int j = 0; j < numberOutput; j++) { double deltaWeight = n * arrOutputError[j] * arrValueHidden[i]; arrWOutput[i, j] += deltaWeight; } } for (int i = 0; i < numberInput; i++)//Cp nht trng s neural n { for (int j = 0; j < numberHidden; j++) { double deltaWeight = n * arrHiddenError[j] * arrDataInput[i]; arrWInput[i, j] += deltaWeight; } } } public void NeuralLearning(System.Windows.Forms.ProgressBar pr) { string fileName = ""; for (int i = 0; i < arrDesiredOuput.Length; i++) { fileName += arrDesiredOuput[i].ToString(); } int count = 0; while (count++ < 10000) { pr.Value = count; CalculatedValueHidden(); CalculatedValueOutput(); CalculatedErrors(); UpdateNewWeights(); } DataProvider.OverWriteArrayToFile(fileName, arrWInput, numberInput, numberHidden); DataProvider.WriteArrayToFile(fileName, arrWOutput, numberHidden, numberOutput); DataProvider.WriteArrayToFile(fileName, arrDataOutput); }
public double FindNumberError() { CalculatedValueHidden(); CalculatedValueOutput(); double result = 0; for (int i = 0; i < numberOutput; i++) { result += Math.Abs(arrDesiredOuput[i] - arrDataOutput[i]) * Math.Abs(arrDesiredOuput[i] arrDataOutput[i]); } return result; } #endregion } }
3.1.2.
Lp ImageProcessing
using System; using System.Drawing; using System.Windows.Forms; namespace NhanDang { class ImageProcessing { //public static Bitmap ToBinary(Bitmap bm, Byte band) //{ // Bitmap bitmap = new Bitmap(bm); // int x, y; // Color c; // for (y = 0; y < bm.Height - 1; y++) // { // for (x = 0; x < bm.Width - 1; x++) // { // c = bm.GetPixel(x, y); // if (c.R < band) // bitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); // else // bitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); // } // } // return bitmap; //} public static Bitmap ToBinaryLocBits(Bitmap bm, Byte band) { Bitmap bitmap = new Bitmap(bm); Rectangle rec = new Rectangle(0, 0, bitmap.Width, bitmap.Height); System.Drawing.Imaging.BitmapData bmpData = bitmap.LockBits(rec, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; Int32 bytes = Math.Abs(bmpData.Stride) * bitmap.Height; Byte[] rgbValues = new Byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); for (int counter = 0; counter < rgbValues.Length - 1; counter += 4)
{ Byte colorR = rgbValues[counter]; Byte colorG = rgbValues[counter + 1]; Byte colorB = rgbValues[counter + 2]; if (colorR < band || colorB <band || colorG <band) { rgbValues[counter + 0] = 0; rgbValues[counter + 1] = 0; rgbValues[counter + 2] = 0; } else { rgbValues[counter + 0] = 255; rgbValues[counter + 1] = 255; rgbValues[counter + 2] = 255; } } System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes); bitmap.UnlockBits(bmpData); return bitmap; } public static Bitmap ResizeImage(Bitmap bm) { Point pBegin = new Point(bm.Width,bm.Height); Point pEnd = new Point(0,0); Bitmap bitmap = new Bitmap(bm); Rectangle rec = new Rectangle(0, 0, bitmap.Width, bitmap.Height); System.Drawing.Imaging.BitmapData bmpData = bitmap.LockBits(rec, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; Int32 bytes = Math.Abs(bmpData.Stride) * bitmap.Height; Byte[] rgbValues = new Byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); Byte color; for (int counter = 0; counter < rgbValues.Length - 1; counter += 4) { color = rgbValues[counter]; if (color == 0) { Point p = new Point((counter - (counter / bmpData.Stride) * bmpData.Stride)/4, counter / bmpData.Stride); if (p.X < pBegin.X) { pBegin.X = p.X; } if (p.Y < pBegin.Y) { pBegin.Y = p.Y; } if (p.X > pEnd.X) { pEnd.X = p.X; } if (p.Y > pEnd.Y) {
pEnd.Y = p.Y; } } } bitmap.UnlockBits(bmpData); if (pEnd.X <= pBegin.X) { return bitmap; } else { return bitmap.Clone(new Rectangle(pBegin, new Size(pEnd.X - pBegin.X + 1, pEnd.Y - pBegin.Y + 1)), bitmap.PixelFormat); } } public static double[] arrInput(Bitmap bm, int width, int height, int z) { double[] result = new double[width*height]; int[,] arr = new int[bm.Height, bm.Width]; Bitmap bitmap = new Bitmap(bm); Rectangle rec = new Rectangle(0, 0, bitmap.Width, bitmap.Height); System.Drawing.Imaging.BitmapData bmpData = bitmap.LockBits(rec, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; Int32 bytes = Math.Abs(bmpData.Stride) * bitmap.Height; Byte[] rgbValues = new Byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); for (int counter = 0; counter < rgbValues.Length - 1; counter += 4) { Point p = new Point((counter - (counter / bmpData.Stride) * bmpData.Stride) / 4, counter / bmpData.Stride); if (rgbValues[counter]==0) { arr[p.Y, p.X] = 1; } else { arr[p.Y, p.X] = 0; } } int[,] black = new int[height, width]; int[,] white = new int[height, width]; for (int i = 0; i < bm.Height; i++) { for (int j = 0; j < bm.Width; j++) { int indexR = i * height / bm.Height; int indexC = j * width / bm.Width; if (arr[i,j] == 1) { black[indexR, indexC]++; } else {
white[indexR, indexC]++; } } } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { result[i * width + j] = black[i, j] >= (white[i, j] / z) ? 1 : 0; } } return result; } public static Bitmap ArrayToBitMap(double[] arr, int height, int width) { Bitmap bt = new Bitmap(width, height); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { bt.SetPixel(j, i, arr[width * i + j] == 0 ? Color.White : Color.Black); } } return bt; } } }
3.2.2.
3.2.3.
KT LUN
Trong qu trnh thc hin bi tp ln ni dung nghin cu ti ca nhm em c gm cc phn chnh sau: Tm hiu mng nron nhn to. Tm hiu bi ton nhn dng (c bit nhn dng hnh khi) Tm hiu x l nh Phn tch bi ton nhn dng hnh khi. Thit k mng v hun luyn mng nron cho bi ton ng dng mng nron trong nhn dng k t. Ci t v kim tra thc nghim bi ton ny.