
Hai, habrozhiteli! Penguatan Pembelajaran adalah bidang kecerdasan buatan yang paling populer dan menjanjikan. Pembelajaran praktis RL dengan Python akan membantu Anda tidak hanya menguasai dasar, tetapi juga algoritma pembelajaran mendalam yang canggih dengan penguatan. Buku ini ditujukan untuk pengembang MO dan penggemar pembelajaran dalam yang tertarik pada kecerdasan buatan dan ingin mempelajari metode pembelajaran penguatan. Baca buku ini dan menjadi ahli dalam pembelajaran yang diperkuat dengan menerapkan contoh-contoh praktis di dalam atau di luar pekerjaan. Pengetahuan tentang aljabar linier, analisis matematika, dan bahasa pemrograman Python akan membantu Anda memahami logika presentasi.
Kutipan. Membuat Lirik Menggunakan LSTM RNN
Sekarang mari kita lihat bagaimana menggunakan LSTM untuk menghasilkan lirik Zayn Malik. Kumpulan data lirik lagu Zane dapat diunduh di
https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/07.%20Deep%20Learning%20Fundamentals/data/ZaynLyrics.txt .
Pekerjaan dimulai dengan mengimpor perpustakaan yang diperlukan:
import tensorflow as tf import numpy as np
Kemudian file dengan lirik dibaca:
with open("Zayn_Lyrics.txt","r") as f: data=f.read() data=data.replace('\n','') data = data.lower()
Pastikan bahwa data telah berhasil diunggah:
data[:50] "now i'm on the edge can't find my way it's inside "
Sekarang semua karakter disimpan dalam variabel all_chars:
all_chars=list(set(data))
Jumlah karakter unik disimpan di unique_chars:
unique_chars = len(all_chars)
Dan jumlah total karakter disimpan dalam variabel total_chars:
total_chars =len(data)
Pertama-tama kita menetapkan indeks masing-masing karakter. char_to_ix akan berisi pemetaan karakter ke indeks, dan ix_to_char akan berisi pemetaan karakter ke indeks:
char_to_ix = { ch:i for i,ch in enumerate(all_chars) } ix_to_char = { i:ch for i,ch in enumerate(all_chars) }
Contoh:
char_to_ix['e'] 9 ix_to_char[9] e
Kemudian fungsi generate_batch didefinisikan, yang menghasilkan input dan nilai target. Nilai target sama dengan pergeseran nilai input kali i.
Misalnya, jika input = [12,13,24] dengan nilai shift 1, maka nilai target akan [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
Kami akan menentukan panjang urutan, kecepatan belajar, dan jumlah node, yang sama dengan jumlah neuron:
seq_length = 25 learning_rate = 0.1 num_nodes = 300
Bangun LSTM RNN. TensorFlow menyediakan fungsi BasicLSTMCell () untuk membangun sel LSTM; Anda harus menentukan jumlah unit dalam sel LSTM dan jenis fungsi aktivasi yang digunakan.
Jadi, kita membuat sel LSTM dan membangun jaringan RNN dengan sel ini menggunakan fungsi tf.nn.dynamic_rnn (), yang mengembalikan output dan nilai status:
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
Sekarang buat pengganti untuk input X dan target Y:
X=tf.placeholder(tf.float32,[None,1]) Y=tf.placeholder(tf.float32,[None,1])
Ubah X dan Y ke int:
X=tf.cast(X,tf.int32) Y=tf.cast(Y,tf.int32)
Juga buat satu tampilan viewhot untuk X dan Y:
X_onehot=tf.one_hot(X,unique_chars) Y_onehot=tf.one_hot(Y,unique_chars)
Dapatkan output dan status dari RNN dengan memanggil fungsi build_rnn:
outputs,states=build_rnn(X_onehot)
Transpose output:
outputs=tf.transpose(outputs,perm=[1,0,2])
Kami menginisialisasi bobot dan offset:
W=tf.Variable(tf.random_normal((num_nodes,unique_chars),stddev=0.001)) B=tf.Variable(tf.zeros((1,unique_chars)))
Kami menghitung output dengan mengalikan output dengan bobot dan menambahkan offset:
Ys=tf.matmul(outputs[0],W)+B
Sekarang kita akan melakukan aktivasi softmax dan mendapatkan probabilitas:
prediction = tf.nn.softmax(Ys)
Hilangnya cross_entropy akan dihitung sebagai berikut:
cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels =Y_onehot,logits=Ys))
Tujuan kami adalah meminimalkan kerugian, jadi kami akan melakukan propagasi balik untuk jaringan dan melakukan penurunan gradien:
optimiser = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cro ss_entropy)
Kemudian fungsi bantu memprediksi akan ditentukan, yang akan memberikan indeks simbol prediksi berikutnya sesuai dengan model 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
Kemudian, ukuran paket batch_size, jumlah paket dan jumlah era, serta nilai pergeseran untuk menghasilkan paket akan ditetapkan:
batch_size=100 total_batch=int(total_chars//batch_size) epochs=1000 shift=0
Akhirnya, kami membuat sesi TensorFlow dan membuat model:
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
Seperti yang Anda lihat dari hasilnya, di era awal, output terdiri dari karakter acak, tetapi ketika Anda belajar, hasilnya meningkat:
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!
Tentang penulis
Sudharsan Ravichandiran adalah seorang spesialis dalam pengolahan dan analisis data, penggemar kuat kecerdasan buatan dan blogger video. Dia memperoleh gelar sarjana dalam ilmu komputer dari Anne University dan terlibat dalam penelitian tentang implementasi praktis pembelajaran mendalam dan pembelajaran yang diperkuat, termasuk pemrosesan bahasa alami dan visi komputer. Sebelumnya bekerja sebagai desainer dan pengembang web freelance, berpartisipasi dalam pembuatan beberapa situs pemenang penghargaan. Dia saat ini mengambil bagian dalam proyek sumber terbuka dan sering menjawab pertanyaan tentang
Stack Overflow .
Tentang editor sains
Sujit Pal adalah Direktur Riset Teknis di Elsevier Labs, tim pengembangan teknologi terbaru Reed-Elsevier Group. Dia terlibat dalam penelitian di bidang pencarian semantik, pemrosesan bahasa alami, mesin, dan pembelajaran mendalam. Di Elsevier, ia bekerja pada beberapa proyek inisiatif, termasuk mengevaluasi dan meningkatkan kualitas pencarian, mengklasifikasikan gambar dan mengidentifikasi duplikat, membuat anotasi dan mengembangkan antologi teks medis dan ilmiah. Dia menulis buku belajar yang mendalam dengan Antonio Gulli dan menulis tentang teknologi di blog
Salmon Run- nya.
Suriyadeepan Ramamoorthy adalah peneliti kecerdasan buatan dan insinyur dari peneliti dan insinyur AI di Pondicherry, India. Subjek utama dari karyanya adalah memahami bahasa alami dan membentuk penalaran. Dia banyak menulis di blog pembelajaran yang mendalam. Di SAAMA Technologies, ia menggunakan metode pembelajaran mendalam untuk menganalisis teks-teks biomedis. Menjadi pendukung kuat perangkat lunak bebas, ia aktif berpartisipasi dalam proyek untuk pengembangannya di komunitas FSFTN. Dia juga tertarik pada jaringan kolaboratif, visualisasi data, dan pemrograman kreatif.
»Informasi lebih lanjut tentang buku ini dapat ditemukan di
situs web penerbit»
Isi»
KutipanKupon diskon 25% untuk penjaja -
PythonSetelah pembayaran versi kertas buku, sebuah buku elektronik dikirim melalui email.