Chủ Nhật, 21 tháng 4, 2019

[Khóa học tensorflow] Bài 3 – Xây dựng mô hình linear regression

Xây dựng mô hình Linear regression sử dụng Tensorflow

Để các bạn dễ hình dung với bài toán, ta có thể xét bài toán thực tế như sau: Bạn có một tập dữ liệu thể hiện giá của căn hộ(y) và diện tích của căn hộ đó(x). Và công việc chúng ta cần làm là làm sao ta có thể dự đoán giá của một căn hộ bất kỳ khi biết diện tích của nó.
Trong phần này, để cho đơn giản mình sẽ sử dụng một tập dữ liệu mà trong đó mỗi điểm dữ liệu gồm 2 giá trị x và y. Ta cần đi tìm hàm y = W * x + b biểu diễn mối liên hệ giữa x và y dựa trên tệp dữ liệu này. Mục tiêu là khi có x mới, chúng ta có thể tìm/dự đoán y thông qua biểu diễn này.
Đây là biểu diễn của dữ liệu huấn luyện trên không gian 2 chiều.

Biểu diễn của dữ liệu trên hệ tọa độ

Nào, hãy cùng bắt tay vào bước thứ nhất: xây dựng/định nghĩa Graph.

Xây dựng Graph

Việc đầu tiên cần làm là import các thư viện cần thiết
Tập dữ liệu của chúng ta, bạn có thể dùng dữ liệu của riêng bạn nhé ^^.
Ok, bây giờ chúng ta cần tạo hai cái thùng rỗng sử dụng tf.placeholder trong đó X là dữ liệu và Y là nhãn của dữ liệu. Lát nữa sẽ truyền vào X_train và Y_train tương ứng trong session.
Việc sử dụng placeholder ở đây sẽ giúp ta có thể truyền vào các mẫu dữ liệu huấn luyện khác nhau. Các bạn có thể hình dung nó giống như việc truyền tham số vào hàm, viết 1 lần và dùng được nhiều lần
Linear model của chúng ta sẽ có dạng y = w * x + b. Trong đó w và b là 2 tham số ta cần tìm. Hai tham số này sẽ thay đổi để tối ưu mất mát trong quá trình huấn luyện. Do đó, chúng ta sẽ khai báo chúng sử dụng tf.Variable và khởi tạo hai biến này bằng 0.
Khi đó, ta sẽ có model dự đoán như sau
Để biết w và b của chúng ta đã thực sự tốt chưa? Chúng ta cần đánh giá thông qua một hàm được gọi là loss/cost function – hàm mất mát. Hàm mất mát của chúng ta sẽ được đánh giá bằng bình phương độ chênh lệch giữa kết quả thực tế và kết quả dự đoán
Mục tiêu của chúng ta là tìm w và b sao cho loss cực tiểu. Ở đây, tôi sẽ dùng GradientDescentOptimizer của TF để cực tiểu hóa hàm loss.
Nếu bạn muốn ghi lại đồ thị của TF vừa xây dựng và xem trên tensorboard. Hãy thêm dòng lệnh này trước session

Thực thi trên Graph

Việc định nghĩa Graph tới đây coi như là hoàn thành, bước thứ 2 là thực thi tính toán trên graph vừa xây dựng.
Chúng ta cần khởi tạo 1 Session và khởi tạo các Variable trước khi thực thi. Chúng ta sẽ run operation optimizer đồng thời tính toán giá trị loss để theo dõi sự thay đổi. Do việc run optimizer phụ thuộc vào 2 placeholder là X và Y nên ta cần truyền vào trong quá trình run: sess.run([optimizer, loss], feed_dict={X: x, Y: y})
Ở đây, chúng ta sẽ chạy trong 100 epoch với batch_size là 1(đưa lần lượt từng mẫu huấn luyện vào)
Chúng ta có thể thấy giá trị loss có xu hướng giảm dần sau mỗi epoch
Như chúng ta thấy, giá trị mất mát là tương đối nhỏ. Chứng tỏ model của chúng ta hoạt động không tồi. Sau khi train xong bạn có thể lấy giá trị w và b bằng cách sau:
Lưu ý: Vẫn thực thi lệnh này trong session nhé.
Lấy kết quả dự đoán của tất cả các mẫu huấn luyện
Bạn có thể so sánh kết quả dự đoán(bên trái) và kết quả thực tế(bên phải):
Biểu diễn của model sử dụng thư viện matplotlib

Biểu diễn kết quả dự đoán của mô hình

Còn đây là hình ảnh model của chúng ta trên tensorboard.

Biểu diễn graph trên tensorboard

Để xem được thì bạn chỉ cần chạy lệnh này trên Terminal, Powershell. Sau khi chạy xong thì truy cập vào địa chỉ được in ra trên terminal.