ایجاد شبکه عصبی بدون کتابخانه در پایتون (قسمت پایانی)
ایجاد شبکه عصبی بدون کتابخانه در پایتون (قسمت پایانی)
ساخت کد پایتون
گرچه ما از کتابخانه شبکه عصبی استفاده نمی کنیم ، اما چهار روش را از کتابخانه ریاضیات پایتون به نام numpy وارد می کنیم. اینها هستند:
exp – نمایی طبیعی
array – یک ماتریس ایجاد می کند
dot – ماتریس ها را ضرب می کند
random – به ما اعداد تصادفی می دهد
به عنوان مثال ، ما می توانیم از متد ()array برای نشان دادن مجموعه آموزشی که قبلاً نشان داده شده است استفاده کنیم:
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_set_outputs = array([[0, 1, 1, 0]]).T
تابع .T ، ماتریس را از حالت افقی به عمودی منتقل می کند. بنابراین رایانه اعداد را به این شکل ذخیره می کند
خوب. من فکر می کنم ما آماده نسخه زیباتر کد منبع هستیم. هنگامی که آن را به شما دادم ، با چند فکر نهایی به پایان می رسانم.
من خط به خط توضیحاتی به کد منبع اضافه کردم تا همه چیز را به طور واضح شرح دهم. توجه داشته باشید که در هر تکرار ما کل مجموعه آموزشی را به طور همزمان پردازش می کنیم. بنابراین متغیرهای ما ماتریس هایی هستند که شبکه اعدادی هستند. در اینجا یک مثال کامل از کار با پایتون آمده است:
from numpy import exp, array, random, dot class NeuralNetwork(): def __init__(self): # Seed the random number generator, so it generates the same numbers # every time the program runs. random.seed(1) # We model a single neuron, with 3 input connections and 1 output connection. # We assign random weights to a 3 x 1 matrix, with values in the range -1 to 1 # and mean 0. self.synaptic_weights = 2 * random.random((3, 1)) - 1 # The Sigmoid function, which describes an S shaped curve. # We pass the weighted sum of the inputs through this function to # normalise them between 0 and 1. def __sigmoid(self, x): return 1 / (1 + exp(-x)) # The derivative of the Sigmoid function. # This is the gradient of the Sigmoid curve. # It indicates how confident we are about the existing weight. def __sigmoid_derivative(self, x): return x * (1 - x) # We train the neural network through a process of trial and error. # Adjusting the synaptic weights each time. def train(self, training_set_inputs, training_set_outputs, number_of_training_iterations): for iteration in xrange(number_of_training_iterations): # Pass the training set through our neural network (a single neuron). output = self.think(training_set_inputs) # Calculate the error (The difference between the desired output # and the predicted output). error = training_set_outputs - output # Multiply the error by the input and again by the gradient of the Sigmoid curve. # This means less confident weights are adjusted more. # This means inputs, which are zero, do not cause changes to the weights. adjustment = dot(training_set_inputs.T, error * self.__sigmoid_derivative(output)) # Adjust the weights. self.synaptic_weights += adjustment # The neural network thinks. def think(self, inputs): # Pass inputs through our neural network (our single neuron). return self.__sigmoid(dot(inputs, self.synaptic_weights)) if __name__ == "__main__": #Intialise a single neuron neural network. neural_network = NeuralNetwork() print "Random starting synaptic weights: " print neural_network.synaptic_weights # The training set. We have 4 examples, each consisting of 3 input values # and 1 output value. training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) training_set_outputs = array([[0, 1, 1, 0]]).T # Train the neural network using a training set. # Do it 10,000 times and make small adjustments each time. neural_network.train(training_set_inputs, training_set_outputs, 10000) print "New synaptic weights after training: " print neural_network.synaptic_weights # Test the neural network with a new situation. print "Considering new situation [1, 0, 0] -> ?: " print neural_network.think(array([1, 0, 0]))
لطفاً توجه داشته باشید که اگر از پایتون 3 استفاده می کنید ، باید دستور ‘xrange’ را با ‘range’ جایگزین کنید.
سعی کنید شبکه عصبی را با استفاده از این دستور CMD اجرا کنید:
python main.py
شما باید به نتیجه ای شبیه به این برسید :
Random starting synaptic weights:
[[-0.16595599]
[ 0.44064899]
[-0.99977125]]
New synaptic weights after training:
[[ 9.67299303]
[-0.2078435 ]
[-4.62963669]]
Considering new situation [1, 0, 0] -> ?:
[ 0.99993704]
ما موفق به این کار شدیم! ما یک شبکه عصبی ساده با استفاده از پایتون ایجاد کردیم!
ابتدا شبکه عصبی به خود وزن های تصادفی اختصاص داد ، سپس خود را با استفاده از مجموعه آموزشی آموزش داد. سپس وضعیت جدیدی را در نظر گرفت [1 ، 0 ، 0] و 0.99993704 را پیش بینی کرد. پاسخ صحیح 1 بود. خیلی نزدیک!
برنامه های رایانه ای سنتی معمولاً نمی توانند یاد بگیرند. چیزی که در مورد شبکه های عصبی شگفت انگیز است این است که آنها می توانند یاد بگیرند ، سازگار شوند و به موقعیت های جدید پاسخ دهند. درست مثل ذهن انسان.
البته این فقط یک نورون بود که یک کار بسیار ساده را انجام می داد. اما اگر میلیون ها نورون از این سلول های عصبی را به هم وصل کنیم ، چه می شود؟ آیا می توانیم روزی چیزی آگاهانه ایجاد کنیم؟
اگر در شبکه های عصبی تازه کار هستید و مایل به کسب اطلاعات بیشتر در مورد هوش مصنوعی هستید ،در دوره های عالی هوش مصنوعی در اکادمی هوش مصنوعی ویرا شرکت کنید تا من یک تکنیک انقلابی را به شما نشان دهم که توسط Google DeepMind اختراع و ثبت شده است به نام Deep Q Learning. شما یک شبکه عصبی ایجاد خواهید کرد که به تنهایی نحوه بازی بدون دانش قبلی را یاد می گیرد.
موفق باشید .
دیدگاهتان را بنویسید