كتاب "التعلم التعزيز العميق في بيثون. OpenAI رياضة وتنسورفلو للإيجابيات »

صورة مرحبا ، habrozhiteli! تعزيز التعلم هو المجال الأكثر شعبية والواعدة من الذكاء الاصطناعي. التعلم العملي RL في بيثون سوف يساعدك على إتقان ليس فقط خوارزميات التعلم العميق المتقدمة مع التعزيز. هذا الكتاب مخصص لمطوري MO ومتحمسين للتعلم العميق المهتمين بالذكاء الاصطناعي ويريدون تعلم طريقة التعلم التعزيز. اقرأ هذا الكتاب وكن خبيرًا في التعلم المعزز من خلال تطبيق أمثلة عملية في العمل أو خارجه. ستساعدك معرفة الجبر الخطي والتحليل الرياضي ولغة برمجة بايثون على فهم منطق العرض التقديمي.

مقتطفات. توليد كلمات باستخدام LSTM RNN


الآن دعونا نرى كيفية استخدام LSTM لإنشاء كلمات زين مالك. يمكن تنزيل مجموعة بيانات كلمات كلمات Zane على https://github.com/sudharsan13296/Hands-On-Rinforcement-Learning-With-Python/blob/master/07.٪20Deep٪20Learning٪20Fundamentals/data/ZaynLyrics.txt .

يبدأ العمل عن طريق استيراد المكتبات اللازمة:

import tensorflow as tf import numpy as np 

ثم قراءة الملف مع كلمات:

 with open("Zayn_Lyrics.txt","r") as f: data=f.read() data=data.replace('\n','') data = data.lower() 

تأكد من أن البيانات قد تم تحميلها بنجاح:

 data[:50] "now i'm on the edge can't find my way it's inside " 

الآن يتم تخزين جميع الأحرف في المتغير all_chars:

 all_chars=list(set(data)) 

يتم تخزين عدد الأحرف الفريدة في unique_chars:

 unique_chars = len(all_chars) 

ويتم تخزين إجمالي عدد الأحرف في المتغير total_chars:

 total_chars =len(data) 

أولاً ، نخصص لكل حرف فهرسًا. سيحتوي char_to_ix على تعيين الحرف إلى الفهرس ، وسيحتوي ix_to_char على تعيين الحرف إلى الفهرس:

 char_to_ix = { ch:i for i,ch in enumerate(all_chars) } ix_to_char = { i:ch for i,ch in enumerate(all_chars) } 

مثال:

 char_to_ix['e'] 9 ix_to_char[9] e 

ثم يتم تعريف الدالة gener_batch ، والتي تولد قيم الإدخال والهدف. القيم المستهدفة مساوية لتحول مرات قيمة الإدخال i.

على سبيل المثال ، إذا كانت المدخلات = [12،13،24] بقيمة التحول هي 1 ، فإن القيم المستهدفة ستكون [13،24]:

 def generate_batch(seq_length,i): inputs = [char_to_ix[ch] for ch in data[i:i+seq_length]] targets = [char_to_ix[ch] for ch in data[i+1:i+seq_length+1]] inputs=np.array(inputs).reshape(seq_length,1) targets=np.array(targets).reshape(seq_length,1) return inputs,targets 

سنحدد طول التسلسل وسرعة التدريب وعدد العقد ، وهو ما يساوي عدد الخلايا العصبية:

 seq_length = 25 learning_rate = 0.1 num_nodes = 300 

بناء LSTM RNN. يوفر TensorFlow وظيفة BasicLSTMCell () لبناء خلايا LSTM ؛ يجب عليك تحديد عدد الوحدات في خلية LSTM ونوع وظيفة التنشيط المستخدمة.

لذلك ، ننشئ خلية LSTM وننشئ شبكة RNN باستخدام هذه الخلية باستخدام الدالة tf.nn.dynamic_rnn () ، والتي تُرجع المخرجات وقيمة الحالة:

 def build_rnn(x): cell= tf.contrib.rnn.BasicLSTMCell(num_units=num_nodes, activation=tf.nn.relu) outputs, states = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32) return outputs,states 

قم الآن بإنشاء بديل للإدخال X والهدف Y:

 X=tf.placeholder(tf.float32,[None,1]) Y=tf.placeholder(tf.float32,[None,1]) 

تحويل X و Y إلى int:

 X=tf.cast(X,tf.int32) Y=tf.cast(Y,tf.int32) 

قم أيضًا بإنشاء طرق عرض onehot لـ X و Y:

 X_onehot=tf.one_hot(X,unique_chars) Y_onehot=tf.one_hot(Y,unique_chars) 

احصل على المخرجات والحالات من RNN عن طريق استدعاء دالة build_rnn:

 outputs,states=build_rnn(X_onehot) 

تبديل الإخراج:

 outputs=tf.transpose(outputs,perm=[1,0,2]) 

نهيئ الأوزان والإزاحة:

 W=tf.Variable(tf.random_normal((num_nodes,unique_chars),stddev=0.001)) B=tf.Variable(tf.zeros((1,unique_chars))) 

نحسب الناتج بضرب الناتج بالوزن وإضافة الإزاحة:

 Ys=tf.matmul(outputs[0],W)+B 

الآن سنقوم بتنشيط softmax والحصول على الاحتمالات:

 prediction = tf.nn.softmax(Ys) 

سيتم حساب فقدان التقاطع المتقاطع كما يلي:

 cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels =Y_onehot,logits=Ys)) 

هدفنا هو التقليل إلى الحد الأدنى من الخسارة ، لذلك سنقوم بإجراء الانتشار الخلفي للشبكة وننفذ النسب التدرج:

 optimiser = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cro ss_entropy) 

بعد ذلك ، سيتم تحديد الوظيفة الإضافية المتوقعة ، والتي ستعطي مؤشرات الرمز المتوقع التالي وفقًا لنموذج RNN:

 def predict(seed,i): x=np.zeros((1,1)) x[0][0]= seed indices=[] for t in range(i): p=sess.run(prediction,{X:x}) index = np.random.choice(range(unique_chars), p=p.ravel()) x[0][0]=index indices.append(index) return indices 

بعد ذلك ، سيتم تعيين حجم الحزمة batch_size وعدد الحزم وعدد العصور ، بالإضافة إلى قيمة الإزاحة لإنشاء الحزمة:

 batch_size=100 total_batch=int(total_chars//batch_size) epochs=1000 shift=0 

أخيرًا ، نقوم بإنشاء جلسة TensorFlow وبناء نموذج:

 init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for epoch in range(epoch): print("Epoch {}:".format(epoch)) if shift + batch_size+1 >= len(data): shift =0 #         # generate_batch,      shift, #    for i in range(total_batch): inputs,targets=generate_batch(batch_size,shift) shift += batch_size # calculate loss if(i%100==0): loss=sess.run(cross_entropy,feed_dict={X:inputs, Y:targets}) #      #    predict index =predict(inputs[0],200) #     ix_to_char #    txt = ''.join(ix_to_char[ix] for ix in index) print('Iteration %i: '%(i)) print ('\n %s \n' % (txt, )) sess.run(optimiser,feed_dict={X:inputs,Y:targets}) 

كما ترون من النتائج ، في الفترة الأولية ، يتكون الإخراج من أحرف عشوائية ، ولكن كما تعلمون ، تتحسن النتائج:

 Epoch 0: Iteration 0: wsadrpud,kpswkypeqawnlfyweudkgt,khdi nmgof' u vnvlmbis . snsblp,podwjqehb,e;g- 'fyqjsyeg,byjgyotsrdf;;u,ha;ik'sfc;dvtauofd.,q.;npsw'wjy-quw'quspfqw- . . . Epoch 113: Iteration 0: i wanna see you, yes, and she said yes! 

عن المؤلف


Sudharsan Ravichandiran متخصص في معالجة البيانات وتحليلها ، وهو من المتحمسين للذكاء الاصطناعي ومدون الفيديو. حصل على درجة البكالوريوس في علوم الكمبيوتر من جامعة آن ، ويشارك في الأبحاث حول التنفيذ العملي للتعلم العميق والتعلم المعزز ، بما في ذلك معالجة اللغة الطبيعية ورؤية الكمبيوتر. عمل سابقًا كمصمم ومطور ويب مستقل ، وشارك في إنشاء العديد من المواقع الحائزة على جوائز. يشارك حاليًا في مشاريع مفتوحة المصدر وغالبًا ما يجيب على أسئلة حول Stack Overflow .

حول محرري العلوم


سوجيت بال هو مدير البحوث التقنية في Elsevier Labs ، أحدث فريق لتطوير التكنولوجيا في شركة Reed-Elsevier Group. يشارك في البحث في مجال البحث الدلالي ومعالجة اللغة الطبيعية والتعلم الآلي والعميق. في Elsevier ، عمل على العديد من مشاريع المبادرة ، بما في ذلك تقييم وتحسين جودة البحث وتصنيف الصور وتحديد الهوية المكررة والتعليق عليها وتطوير النصوص المختصرة للنصوص الطبية والعلمية. وقد كتب كتابًا تعليميًا عميقًا مع أنطونيو جولي ، وكتب عن التكنولوجيا في مدونة Salmon Run .

سورياديبان راامورثي هو باحث ومهندس في مجال الذكاء الاصطناعي من باحث ومهندس الذكاء الاصطناعي في بونديشيري (الهند). الموضوع الرئيسي في عمله هو فهم اللغات الطبيعية وتشكيل التفكير. يكتب على نطاق واسع على مدونة التعلم العميق. في SAAMA Technologies ، يستخدم أساليب متقدمة للتعلم العميق لتحليل النصوص الطبية الحيوية. لكونه داعمًا متحمسًا للبرنامج المجاني ، يشارك بفعالية في مشاريع لتطويرها في مجتمع FSFTN. وهو مهتم أيضًا بالشبكات التعاونية وتصور البيانات والبرمجة الإبداعية.

»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على موقع الناشر
» المحتويات
» مقتطفات

خصم 25٪ على كوبون الباعة المتجولين - بيثون

عند دفع النسخة الورقية من الكتاب ، يتم إرسال كتاب إلكتروني عبر البريد الإلكتروني.

Source: https://habr.com/ru/post/ar465605/


All Articles