Tải bản đầy đủ (.docx) (45 trang)

BTL Trí Tuệ Nhân Tạo Phân Biệt Chó Mèo

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (0 B, 45 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

BÁO CÁO THÍ NGHIỆM/THỰC NGHIỆM
HỌC PHẦN: TRÍ TUỆ NHÂN TẠO
ĐỀ TÀI:

ỨNG DỤNG THUẬT TỐN CNN VÀ KERAS
VÀO PHÂN BIỆT CHĨ VÀ MÈO

Sinh viên thực hiện: Dương Trung Kiên 2020604160
Đỗ Thành Đạt 202060384
Lớp: 20221IT6043012
Nhóm:24
Người hướng dẫn: Th.S Nguyễn Lan An

Hà Nội, 12/2022


Mục Lục
LỜI MỞ ĐẦU..................................................................................... 1
Chương I. Tìm hiểu về thuật toán CNN ............................................... 2
1. Giới Thiệu mạng CNN..................................................................2
2. Những lớp cơ bản của mạng CNN................................................3
3. Kiến trúc của mạng CNN..............................................................5
4. Cách lựa chọn tham số của mạng CNN.........................................7
Chương 2. Tìm hiểu về thư viện lớn TensorFlow.................................8
1. Lịch sử ra đời của TensorFlow......................................................8
2. Ví dụ TensorFlow đơn giản........................................................14
3. Các option tải dữ liệu vào TensorFlow.......................................16
Chương 3. Tìm hiểu về thư viện Keras..............................................19


1. Giới thiệu về thư viện Keras.......................................................19
2. MNIST Dataset..............................................................................23
3. Ứng dụng của việc phân loại ảnh................................................30
Chương 4. Ứng dụng nhận diện chó mèo...........................................30
1. Giới thiệu về dự án ....................................................................30
2. Bộ dữ liệu Asirra (Chó và Mèo)..................................................31
3. Các bước xây dựng ứng dụng .....................................................31
4. GUI phân loại chó mèo...............................................................39
5. Bản tóm tắt.................................................................................. 41
Tài Liệu Tham Khảo

41


3

LỜI MỞ ĐẦU
Hiện nay, việc ứng dụng trí tuệ nhân tạo vào nhận diện sự vật quanh ta đang cực
kì phổ biến và phát triển, đặc biệt là những thứ thân thuộc, gần gũi với cuộc sống
con người. Chính vì lý do đó mà chúng em đã quyết định lựa chọn phát triển phần
mềm nhận diên cho hoặc mèo và có thể nâng cấp lên nhận diên nhiều động vật và
đồ vật khác để làm để tài cho bài tập lớn mơn trí tuệ nhân tạo. Đây là tài liệu dùng
để nhận diện chó hoặc mèo dựa trên hình ảnh đã được cung cấp. Trong game có sử
dụng thuật tốn CNN KERAS. Tài liệu này giúp ta có một cái nhìn tổng qt về
việc áp dụng thuật tốn vào phần mềm phân biệt chó hoặc mèo thơng qua hình ảnh
đã được cung cấp sẵn.
Em xin chân thành cảm ơn cô giáo Ths. Nguyễn Lan Anh đã trang bị cho em
những kiến thức cần thiết qua mơn “Trí tuệ nhân tạo” để có thể hồn thành dự án
này.
Tuy nhiên do thời gian cùng với trình độ hiểu biết cịn hạn hẹp nên khó tránh

khỏi những thiếu sót. Rất mong nhận được sự đóng góp của q thầy cơ và các bạn
để dự án được hoàn thiện hơn.
Xin chân thành cảm ơn!

CHƯƠNG 1: Tìm hiểu về thuật tốn CNN?


4

1. Giới thiệu về mạng CNN
CNN là từ viết tắt của cụm Convolutional Neural Network hay là mạng nơ
ron tích chập. Đây là mơ hình vơ cùng tiên tiến được áp dụng nhiều trong lĩnh vực
học sâu Deep learning. Mạng CNN cho phép người dùng xây dựng những hệ thống
phân loại và dự đốn với độ chính xác cực cao. Hiện nay, mạng CNN được ứng
dụng nhiều hơn trong xử lý ảnh, cụ thể là nhận diện đối tượng trong ảnh.

Mạng CNN là gì?
* Convolutional trong CNN
Đây là một “cửa sổ” sử dụng trượt trên ma trận nhằm lấy được những thơng
tin chính xác và cần thiết nhất mà khơng phải chọn đặc trưng (feature).


5

Convolution hay nhân tích chập là cách mà những lớp Convolutional này nhân
những phần tử trong ma trận. Sliding Window hay kernel là dạng ma trận có kích
thước nhỏ, sử dụng trong nhân tích chập với ma trận hình ảnh.

* Feature trong CNN
Feature là đặc trưng, mạng CNN sẽ so sánh dựa vào từng mảnh và các mảnh

như vậy được gọi là feature. Thay vì phải tiến hành khớp các bức ảnh lại với nhau
thì mạng CNN sẽ xác định được sự tương đồng thơng qua tìm kiếm thơ những đặc
trưng khớp với nhau bằng hai hình ảnh tốt hơn. Một feature là mộ hình ảnh dạng
mini (những mảng 2 chiều nhỏ). Những feature này đều tương ứng với một khía
cạnh nào đó của hình ảnh và chúng có thể khớp lại được với nhau.

2. Những lớp cơ bản của mạng CNN là gì?
Mạng CNN bảo gồm những lớp cơ bản sau:

* Convolutional layer
Lớp này là phần quan trọng nhất của tồn mạng CNN, nó có nhiệm vụ thực thi
các tính tốn. Các yếu tố quan trọng trong lớp Convolutional là: padding, stride,
feature map và filter map.


Mạng CNN sử dụng filter để áp dụng vào các vùng của ma trận hình ảnh.
Các filter map là các ma trận 3 chiều, bên trong đó là những tham số và
chúng được gọi là parameters..tride tức là bạn dịch chuyển filter map theo
từng pixel dựa vào các giá trị từ trái qua phải.



Padding: Thường, giá trị viền xung quanh của ma trận hình ảnh sẽ được
gán các giá trị 0 để có thể tiến hành nhân tích chập mà khơng làm giảm
kích thước ma trận ảnh ban đầu.



Feature map: Biểu diễn kết quả sau mỗi lần feature map quét qua ma trận
ảnh đầu vào. Sau mỗi lần quét thì lớp Convolutional sẽ tiến hành tính

tốn.


6

Convolutional layer

* Relu Layer
Lớp ReLU này là hàm kích hoạt trong mạng CNN, được gọi là activation
function. Nó có tác dụng mơ phỏng những nơ ron có tỷ lệ truyền xung qua axon.
Các hàm activation khác như Leaky, Sigmoid, Leaky, Maxout,.. tuy nhiên hiện nay,
hàm ReLU được sử dụng phổ biến và thông dụng nhất.
Hàm này được sử dụng cho những yêu cầu huấn luyện mạng nơ ron với những ưu
điểm nổi bật điển hình là hỗ trợ tính tốn nhanh hơn. Trong quá trình dùng hàm
ReLU, bạn cần chú ý đến việc tùy chỉnh những learning rate và dead unit. Những
lớp ReLU được dùng sau khi filter map được tính và áp dụng ReLU lên các giá trị
của filter map.
Pooling layer
Khi ma trận ảnh đầu vào có kích thước quá lớn, các lớp Pooling layer sẽ được đặt
vào giữa những lớp Convolutional để làm giảm những parameters. Hiện, hai loại
lớp Pooling được sử dụng phổ biến là Max pooling và Average.


7

Pooling Layer

* Fully connected layer
Đây là lớp có nhiệm vụ đưa ra kết quả sau khi hai lớp Convolutional và Pooling đả
nhận được ảnh truyền. Khi này, ta sẽ thu được một model đọc được thơng tin của

ảnh. Để có thể liên kế chúng cũng như cho nhiều đầu ra hơn ta sẽ sử dụng Fully
connected layer.
Ngoài ra, nếu lớp này có dữ liệu hình ảnh thì lớp sẽ chuyển chúng thành các much
chưa được phân chia chất lượng để tìm ra ảnh có chất lượng cao nhất.

3. Kiến trúc của mạng CNN là gì?
Mạng CNN là gì? Đó là tập hợp những Convolutional layer xếp chồng lên
nhau, đồng thời mạng sử dụng những hàm như ReLU và Tanh để kích hoạt các
trọng số trong các node. Các lớp này sau khi qua các hàm activation sẽ có trọng số
trong những node và có thể tạo ra những thơng tin trừu tượng hơn đến với các lớp
kế tiếp trong mạng.


8

Mạng CNN có tính kết hợp cà tính bất biến. Tức là, nếu cùng một đối tượng mà sử
dụng chiếu theo các góc độ khác nhau thì sẽ có ảnh hưởng đến độ chính xác. Với
dịch chuyển, co giãn hay quay ma trận ảnh thì lớp Pooling sẽ được dùng để hỗ trợ
làm bất biến các tính chất này. Chính vì vậy mà mạng CNN sẽ đưa ra những kết
quả có độ chính xác tương ứng với từng mơ hình.
Trong đó, lớp Pooling sẽ có khả năng tạo tính bất biến với phép dịch chuyển,
co giãn và quay. Cịn tính kết hợp cục bộ sẽ cho thấy những cấp độ biểu diễn, dữ
liệu từ thấp đến cao với mức trừu twuongj thơng qua Convolution từ filter. Mạng
CNN có những lớp liên kết nhau dựa vào cơ chế Convolution.
Các lớp tiếp theo sẽ là kết quả từ những lớp trước đó, vì vậy mà bạn sẽ có
những liên kết cục bộ phù hợp nhất. Trong quá trình huấn luyện mạng, CNN sẽ tự
học hỏi những giá trị thông qua filter layer dựa theo cách thức mà bạn thực hiện.
Cấu trúc cơ bản của một mơ hình mạng CNN thường bao gồm 3 phần chính bao
gồm:



Trường cục bộ/ Local receptive field: Lớp này sử dụng để tách lọc dữ
liệu, thơng tin hình ảnh để từ đó có thể lựa chọn các vùng có giá trị sử
dụng hiệu quả cao nhất.



Trọng số chia sẻ/ Shared weights and bias: Lớp này hỗ trợ làm giảm các
tham số đến mức tối thiểu trong mạng CNN. Trong từng lớp convolution
sẽ chứa các feature map riêng và từng feature thì sẽ có khả năng phát hiện
một vài feature trong hình ảnh.



Lớp tổng hợp/ Pooling layer: Đây là lớp cuối cùng và sử dụng để làm đơn
giản các thơng tin output. Tức là, sau khi tính tốn xong và quét qua các
layer trong mạng thì pooling layer sẽ được dùng để lược bỏ các thơng tin
khơng hữu ích. Từ đó cho ra kết quả theo kỳ vọng người dùng.


9

Mạng CNN được sử dụng phổ biến

4. Cách lựa chọn tham số cho mạng CNN
Để chọn tham số phù hợp nhất cho mạng CNN thì bạn cần chú ý đến những
yếu tố như: filter size, số convolution, pooling size và việc train – test.


Lớp Convolution: Số lượng lớp này càng nhiều thì sẽ giúp cải thiện được

hoạt động của chương trình. Sử dụng những lớp với số lượng lớn thì khả
năng hạn chế các tác động các tốt. Thông thường, chỉ sau khoảng 3 đến 4
lớp bạn sẽ đạt được kết quả như kỳ vọng.



Filter size: Kích thước thường chọn l ma trn 3ì3 hoc ma trn 5ì5

ã

Pooling size: Vi những hình ảnh thơng thường, bạn nên chọn ma trận
pooling kích thước 2×2. Với những ảnh kích thước lớn thì nờn chn ma
trn kớch thc 3ì3.

ã

Train test: Cn thc hiện train – test nhiều lần để có thể cho ra những
parameter tốt nhất.


10

Hy vọng rằng những chia sẻ trên, bạn sẽ hiểu được CNN là gì và cấu trúc của
mạng này ra sao. Để từ đó có thể áp dụng trong quá trình học và làm việc với
Machine Learning, Deep Learning nói riêng và Trí tuệ nhân tạo nói chung.

CHƯƠNG 2: Tìm hiểu về thư viện lớn TensorFlow
Tensorflow là gì – Với sự bùng nổ của lĩnh vực Trí Tuệ Nhân Tạo – A.I. trong
thập kỷ vừa qua, machine learning và deep learning rõ ràng cũng phát triển theo
cùng. Và ở thời điểm hiện tại, TensorFlow chính là thư viện mã nguồn mở cho

machine learning nổi tiếng nhất thế giới, được phát triển bởi các nhà nghiên cứu từ
Google. Việc hỗ trợ mạnh mẽ các phép tốn học để tính tốn trong machine
learning và deep learning đã giúp việc tiếp cận các bài tốn trở nên đơn giản,
nhanh chóng và tiện lợi hơn nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow
xây dựng được nhiều neural network. Nó cịn cho phép bạn tính tốn song song
trên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy
hay tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model. Nếu
bạn muốn chọn con đường sự nghiệp trong lĩnh vực A.I. này, nắm rõ những điều cơ
bản của TensorFlow thực sự rất quan trọng.
Được viết bằng C++ và thao tác interface bằng Python nên phần performance
của TensorFlow cực kỳ tốt. Đối tượng sử dụng nó cũng đa dạng khơng kém: từ các
nhà nghiên cứu, nhà khoa học dữ liệu và dĩ nhiên khơng thể thiếu các lập trình
viên.
1.

Lịch sử ra đời TensorFlow

Vài năm trước, khi phải xử lý lượng dữ liệu khổng lồ, deep learning bắt đầu
cho thấy hiệu năng vượt trội so với tất cả các thuật toán machine learning khác.
Google sớm nhận ra tiềm năng này và nghĩ rằng họ nên sử dụng deep neural
network để cải thiện các dịch vụ của mình, trong đó có:
– Gmail.
– Hình ảnh
– Google search engine


11

Thế là họ dựng 1 framework có tên là TensorFlow để các nhà nghiên cứu cũng

như lập trình viên có thể làm việc cùng nhau trên model A.I. 1 khi đã được phát
triển và scale hoàn chỉnh, rất nhiều người đã có thể sử dụng được nó.
Ra mắt lần đầu vào cuối năm 2015, phiên bản TensorFlow ổn định cuối cùng
cũng xuất hiện vào năm 2017. Là mã nguồn mở dưới sự cho phép của Apache
Open Source, giờ đây bạn có thể sử dụng, điều chỉnh và tái đóng góp phiên bản
được điều chỉnh đó, đổi lại khơng cần phải trả bất cứ đồng nào cho Google.


12


13

* Kiến trúc của TensorFlow
Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
– Tiền xử lý dữ liệu
– Dựng model
– Train và ước tính model

* Cách TensorFlow hoạt động
TensorFlow cho phép các lập trình viên tạo ra dataflow graph, cấu trúc mơ tả
làm thế nào dữ liệu có thể di chuyển qua 1 biểu đồ, hay 1 sê-ri các node đang xử
lý. Mỗi node trong đồ thị đại diện 1 operation toán học, và mỗi kết nối hay edge
giữa các node là 1 mảng dữ liệu đa chiều, hay còn được gọi là ‘tensor’.
TensorFlow cung cấp tất cả những điều này cho lập trình viên theo phương
thức của ngơn ngữ Python. Vì Python khá dễ học và làm việc, ngồi ra cịn cung
cấp nhiều cách tiện lợi để ta hiểu được làm thế nào các high-level abstractions có
thể kết hợp cùng nhau. Node và tensor trong TensorFlow là các đối tượng Python,
và các ứng dụng TensorFlow bản thân chúng cũng là các ứng dụng Python.
Các operation toán học thực sự thì khơng được thi hành bằng Python. Các thư

viện biến đổi có sẵn thơng qua TensorFlow được viết bằng các binary C++ hiệu
suất cao. Python chỉ điều hướng lưu lượng giữa các phần và cung cấp các highlevel abstraction lập trình để nối chúng lại với nhau.
TensorFlow 2.0, được ra mắt vào tháng 10 năm 2019, cải tiến framework theo
nhiều cách dựa trên phản hồi của người dùng, để dễ dàng và hiệu quả hơn khi làm
việc cùng nó (ví dụ: bằng cách sử dụng các Keras API liên quan đơn giản cho việc
train model). Train phân tán dễ chạy hơn nhờ vào API mới và sự hỗ trợ cho
TensorFlow Lite cho phép triển khai các mơ hình trên khá nhiều nền tảng khác
nhau. Tuy nhiên, nếu đã viết code trên các phiên bản trước đó của TensorFlow thì
bạn phải viết lại, đơi lúc 1 ít, đơi lúc cũng khá đáng kể, để tận dụng tối đa các tính
năng mới của TensorFlow 2.0.


14

* Lợi ích từ TensorFlow
Lợi ích dễ thấy nhưng quan trọng nhất mà TensorFlow cung cấp cho việc lập
trình machine learning chính là abstraction. Thay vì phải đối phó với những tình
huống rườm rà từ việc thực hiện triển khai các thuật tốn, hay tìm ra cách hợp lý để
chuyển output của 1 chức năng sang input của 1 chức năng khác, giờ đây bạn có
thể tập trung vào phần logic tổng thể của 1 ứng dụng hơn. TensorFlow sẽ chăm sóc
phần cịn lại thay cho bạn.
Ngồi ra TensorFlow cịn ung cấp các tiện ích bổ sung cho các lập trình viên
cần debug cũng như giúp bạn tự suy xét các ứng dụng TensorFlow. Chế độ eager
execution cho phép bạn đánh giá và sửa đổi từng operation của biểu đồ 1 cách
riêng biệt và minh bạch, thay vì phải dựng toàn bộ biểu đồ dưới dạng 1 đối tượng
độc lập vốn khá mơ hồ hay phải đánh giá chung tổng thể. Cuối cùng, 1 tính năng
khá độc đáo của TensorFlow là TensorBoard. TensorBoard cho phép bạn quan sát 1
cách trực quan những gì TensorFlow đang làm.
TensorFlow cịn có nhiều cải tiến từ sự hậu thuẫn từ các ekíp thương mại hạng
A tại Google. Google không những tiếp lửa cho tiến độ nhanh chóng cho sự phát

triển đằng sau dự án, mà còn tạo ra nhiều phục vụ độc đáo xung quanh TensorFlow
để nó dễ dàng deploy và sử dụng: như silicon TPU mình đã nói ở trên để tăng tốc
hiệu suất đám mây Google, 1 online hub cho việc chia sẻ các model được tạo với
framework, sự hiện diện của in-browser và gần gũi với mobile của framework, và
nhiều hơn thế nữa…
Lưu ý: Trong 1 số công việc training, vài chi tiết về việc triển khai của
TensorFlow làm cho nó khó có thể quyết định được hồn tồn kết quả training
model . Đôi khi 1 model được train trên 1 hệ thống này sẽ có thay đổi 1 chút so với
1 model được train trên hệ thống khác, ngay cả khi chúng được cung cấp dữ liệu
như nhau. Các nguyên nhân cho điều này cũng xê xích hay 1 số hành vi khi không
được xác định khi sử dụng GPU. Điều này nói rằng, các vấn đề đó có thể giải
quyết được, và đôi ngũ của TensorFlow cũng đang xem xét việc kiểm sốt nhiều
hơn để ảnh hưởng đến tính quyết định trong quy trình làm việc.

* Giới thiệu các Component của TensorFlow

Tensor


15

Tên của TensorFlow được đưa ra trực tiếp là nhờ vào framework cốt lõi của nó:
Tensor. Trong TensorFlow, tất cả các tính tốn đều liên quan tới các tensor. 1 tensor
là 1 vector hay ma trận của n-chiều không gian đại diện cho tất cả loại dữ liệu. Tất
cả giá trị trong 1 tensor chứa đựng loại dữ liệu giống hệt nhau với 1 shape đã biết
(hoặc đã biết 1 phần). Shape của dữ liệu chính là chiều của ma trận hay mảng.
1 tensor có thể được bắt nguồn từ dữ liệu input hay kết quả của 1 tính tốn.
Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong 1 graph – biểu
đồ. Biểu đồ là 1 tập hợp tính tốn được diễn ra liên tiếp. Mỗi operation được gọi là
1 op node (operation node) và được kết nối với nhau.

Biểu đồ phát thảo các op và kết nối giữa các node. Tuy nhiên, nó khơng hiển thị
các giá trị. Phần edge của các node chính là tensor, 1 cách để nhập operation với
dữ liệu.

Graph
TensorFlow sử dụng framework dạng biểu đồ. Biểu đồ tập hợp và mô tả tất cả
các chuỗi tính tốn được thực hiện trong q trình training. Biểu đồ cũng mang rất
nhiều lợi thế:
– Nó được làm ra để chạy trên nhiều CPU hay GPU, ngay cả các hệ điều hành trên
thiết bị điện thoại.
– Tính di động của biểu đồ cho phép bảo tồn các tính tốn để bạn sử dụng ngay hay sau đó. Biểu đồ
có thể được lưu lại để thực thi trong tương lai.
– Tất cả tính tốn trong biểu đồ được thực hiện bằng cách kết nối các tensor lại với nhau. 1 tensor có
1 node và 1 edge. Node mang operation toán học và sản xuất các output ở đầu cuối. Các edge giải
thích mối quan hệ input/output giữa các node.

* Danh sách các thuật toán nổi bật được hỗ trợ bởi
TensorFlow.
Tính tới thời điểm phiên bản ra mắt TensorFlow 1.10, nó đã sở hữu
built-in API cho:
– Linear regression: tf.estimator.LinearRegressor
– Classification: tf.estimator.LinearClassifier


16

– Deep learning classification: tf.estimator.DNNClassifier
– Deep learning wipe and deep: tf.estimator.DNNLinearCombinedClassifier
– Booster tree regression: tf.estimator.BoostedTreesRegressor
– Boosted tree classification: tf.estimator.BoostedTreesClassifier


2.Ví dụ đơn giản về TensurFlow

Trong 2 line code đầu, ta đã import tensorflow là tf. Với Python, nó chỉ là 1 bài
tập thông dụng khi dùng tên viết tắt cho 1 thư viện. Lợi thế là để tránh gõ đầy đủ
tên của thư viện khi ta cần sử dụng nó.
Ví dụ: chúng ta có thể import tensorflow là tf, và gọi tf khi chúng ta muốn dùng
1 chức năng TensorFlow.
Ta hãy luyện tập quy trình làm việc cơ bản của TensorFlow với 1 ví dụ cơ bản
sau đây:Tạo 1 đồ thị tính tốn nhân 2 số lại với nhau.
Chúng ta sẽ nhân X_1 và X_2 lại với nhau. TensorFlow sẽ tạo 1 node để kết nối
với operation. Trong ví dụ này, nó được gọi là multiply. Khi đồ thị được xác định,
engine tính tốn TensorFlow sẽ nhân X_1 và X_2 lại cùng nhau.


17

Cuối cùng, chúng ta chạy 1 session TensorFlow mà sẽ chạy đồ thị tính tốn với giá
trị của X_1 và X_2 và print phần kết quả của phép nhân.
Hãy xác định các input node của X_1 và X_2. Khi ta tạo 1 node trong
TensorFlow, chúng ta phải chọn nó là loại node gì. Các node X1 và X2 sẽ là node
placeholder – node giữ chỗ. Placeholder chỉ định 1 giá trị mới mỗi khi ta làm 1
phép tính. Ta sẽ tạo chúng như là 1 node TF chấm placeholder.

Bước 1: Xác định giá trị


18

Bước 2: Xác định phần tính tốn

Giờ ta có thể xác định node sẽ thực hiện operation phép nhân. Trong
TensorFlow, chúng ta có thể làm điều đó bằng cách tạo 1 node tf.multiply.
Ta sẽ nhập node X_1 và X_2 tới node nhân. Nó sẽ nói với TensorFlow để liên
kết những node đó trong đồ thị tính tốn, nên ta đang yêu cầu nó để pull các giá trị
từ x và y và nhân phần kết quả. Hãy cho node nhân cái tên multiply. Nó là tồn bộ
định nghĩa cho đồ thị tính tốn đơn giản này.

Bước 3: Thực thi operation
Để thực thi các operation trong đồ thị, ta phải tạo 1 session. Trong TensorFlow,
nó được thực hiện bằng tf.Session(). Giờ ta có 1 session ta có thể hỏi session để
chạy operation trên đồ thị tính tốn của ta bằng cách gọi session. Để chạy phần tính
tốn, chúng ta sẽ dùng run.
Khi operation bổ sung chạy, nó sẽ thấy rằng nó cần để lấy các giá trị của node
X_1 và X_2, nên chúng ta cũng cần cung cấp các trị cho X_1 và X_2. Ta có thể
dùng điều đó bằng cách cung cấp 1 tham số được gọi là feed_dict. Chúng ta
chuyển giá trị 1,2,3 cho X_1 và 4,5,6 cho X_2.
Chúng ta print phần kết quả với print(result). Chúng ta sẽ thấy 4,10 và 18 cho
1×4, 2×5 và 3,6.

3.Các option tải dữ liệu vào TensorFlow
Bước đầu tiên trước khi train 1 thuật tốn machine learning là load dữ liệu. Có
2 cách thông dụng để load dữ liệu:
1. Load dữ liệu vào bộ nhớ: đây là phương pháp đơn giản nhất. Bạn load tất cả


19

dữ liệu vào bộ nhớ như 1 mảng đơn. Bạn cũng có thể viết code bằng Python.
Những dịng code này khơng liên quan gì tới TensorFlow.
2. Pipeline dữ liệu TensorFlow. TensorFlow sở hữu built-in API và nó sẽ giúp

bạn load dữ liệu, thực thi các operation và feed thuật toán machine learning 1 cách
dễ dàng. Phương pháp này hoạt động tốt đặc biệt khi bạn có 1 dataset lớn. Ví dụ:
các hình ảnh thu được được biết khá là khổng lồ và không thể fit vào bộ nhớ. *
*Pipeline dữ liệu sẽ tự quản lý phần bộ nhớ.

Giải pháp sẽ là gì?
Load dữ liệu vào bộ nhớ
Nếu dataset của bạn không quá lớn, chẳng hạn như dưới 10 GB, bạn có thể
dùng phương pháp đầu tiên. Dữ liệu có thể dễ dàng fit vào bộ nhớ. Bạn cũng có thể
dùng 1 thư viện nổi tiếng có tên là Pandas để import các tệp CSV. 1
Load dữ liệu với TensorFlow pipeline
Phương pháp thứ 2 sẽ hoạt động tốt nhất nếu bạn có 1 dataset lớn. Ví dụ: nếu
bạn có 1 dataset nặng 50 GB và máy tính của bạn chỉ có 16GB dung lượng thì rõ
ràng là máy sẽ crash thơi.
Trong tình huống này, bạn cần dựng 1 TensorFlow pipeline. Đường ống sẽ load
dữ liệu trong batch, hay chunk nhỏ. Mỗi batch sẽ được push tới pipeline và sẵn
sàng cho việc training. Dựng 1 pipeline là 1 giải pháp tuyệt vời vì nó cịn cho bạn
sử dụng phép tính tốn song song. Nghĩa là TensorFlow sẽ train model qua nhiều
CPU. Thúc đẩy sự tính tốn và cho phép training mạng lưới thần kinh mạnh mẽ
hơn.
Tóm tắt:
-Nếu bạn có 1 set dữ liệu nhỏ, bạn có thể load dữ liệu trong bộ nhớ với thư viện
Pandas.
-Nếu bạn có 1 set dữ liệu lớn và muốn sử dụng nhiều CPU, thì bạn sẽ thoải mái
hơn khi làm việc cùng TensorFlow pipeline.


20

Bước 2: Tạo placeholder

Giống như ví dụ trước, ta tạo 1 placeholder với tên là X. Ta cần phải chỉ định shape
của TensorFlow 1 cách rõ ràng. Trong vài trường hợp, ta sẽ tải 1 mảng với chỉ 2 giá
trị. Ta có thể viết shape như là shape=[1,2]

Bước 3: Xác định phương pháp cho set dữ liệu
Tiếp theo, chúng ta cần phải xác định set dữ liệu nơi ta có thể nhập giá trị của
placeholder x. Chúng ta cần dùng phương pháp tf.data.Dataset.from_tensor_slices

Bước 4: Tạo đường ống
Trong bước này, ta cần phải khởi tạo pipeline nơi dữ liệu chạy qua. Ta cần tạo 1
iterator với make_initializable_iterator. Đặt tên cho nó là iterator. Rồi ta cần gọi
iterator này để feed cho batch dữ liệu tiếp theo, get_next. Ta đặt tên bước này là
get_next. Hãy lưu ý điều này trong ví dụ của mình, vì chỉ có duy nhất 1 batch dữ
liệu với 2 giá trị.


21

Bước 5: Thực thi operation
Bước cuối cũng tương tự như ví dụ trước. Ta khởi tạo 1 session và chạy operation
iterator. Ta feed cái feed_dict với giá trị được tạo ra bởi numpy. 2 giá trị này sẽ
nhập vào placeholder x. Rồi chúng ta chạy get_next để print kết quả.

III Tìm hiểu về thư viện Keras.
1. Giới thiệu về Keras.


22

Các thư viện deep learning thường được ‘chống lưng’ bởi những hãng công nghệ

lớn: Google (Keras, TensorFlow), Facebook (Caffe2, Pytorch), Microsoft (CNTK),
Amazon (Mxnet), Microsoft và Amazon cũng đang bắt tay xây dựng Gluon (phiên
bản tương tự như Keras). (Các hãng này đều có các dịch vụ cloud computing và
muốn thu hút người dùng).
Sau đây là một vài thống kê để mọi người có cái nhìn tổng quan về các thư viện
được sử dụng nhiều nhât
Số lượng "star" trên Github Repo, số lượng "Contributors" của các thư viện.


23

Những so sánh trên đây chỉ ra rằng TensorFlow, Keras và Caffe là các thư viện
được sử dụng nhiều nhất (gần đây có thêm PyTorch rất dễ sử dụng và đang thu hút
thêm nhiều người dùng).
Keras được coi là một thư viện ‘high-level’ với phần ‘low-level’ (còn được gọi
là backend) có thể là TensorFlow, CNTK, hoặc Theano. Keras có cú pháp đơn giản
hơn TensorFlow rất nhiều. Với mục đích giới thiệu về các mơ hình nhiều hơn là các
sử dụng các thư viện deep learning, tôi sẽ chọn Keras với TensorFlow là ‘backend’.
Những lý do nên sử dụng Keras để bắt đầu:


Keras ưu tiên trải nghiệm của người lập trình



Keras đã được sử dụng rộng rãi trong doanh nghiệp và cộng đồng nghiên cứu



Keras giúp dễ dàng biến các thiết kế thành sản phẩm




Keras hỗ trợ huấn luyện trên nhiều GPU phân tán



Keras hỗ trợ đa backend engines và khơng giới hạn bạn vào một hệ sinh thái


24

Bản chất của bài tốn Deep learning: Bạn có dữ liệu, bạn muốn máy tính học
được các mơ hình (model) từ dữ liệu, sau đó dùng mơ hình đấy để dự đoán được
các dữ liệu mới. Các bước cơ bản làm một bài tốn deep learning:


Xây dựng bài tốn



Chuẩn bị dữ liệu (dataset)



Xây dựng model



Định nghĩa loss function




Thực hiện backpropagation và áp dụng gradient descent để tìm các
parameter gồm weight và bias để tối ưu loss function.



Dự đốn dữ liệu mới bằng model với các hệ số tìm được ở trên

Bước xây dựng model thì áp dụng các kiến thức được trình bày trong bài neural
network và convolutional neural network ta có thể xây dựng model hồn chỉnh từ
đầu bằng python. Tuy nhiên bước backpropagation trở nên phức tạp hơn rất rất
nhiều. Khó để implement và tối ưu được tốc độ tính tốn. Đấy là lý do các
framework về deep learning ra đời với các đặc điểm:


Người dùng chỉ cần định nghĩa model
và loss function, framework sẽ lo
phần backpropagation.



Việc định nghĩa layer, activation
function, loss function đơn giản hơn
cho người dùng. Ví dụ để thêm layer
trong neural network chỉ cần báo là
layer có bao nhiêu node và dùng hàm
activation gì.



25


Tối ưu việc tính tốn trên CPU và
GPU.

Các deep learning framework phổ biến. Nguồn:
/>Có thể thấy tensorflow là framework phổ biến nhất tuy nhiên tensorflow khá
khó sử dụng cho người mới bắt đầu. Nên mình sẽ giới thiệu về keras: dễ sử dụng,
thân thiện với người dùng nhưng đủ tốt để làm các bài toán về deep learning.
Keras là một framework mã nguồn mở cho deep learning được viết bằng
Python. Nó có thể chạy trên nền của các deep learning framework khác như:
tensorflow, theano, CNTK. Với các API bậc cao, dễ sử dụng, dễ mở rộng, keras
giúp người dùng xây dựng các deep learning model một cách đơn giản.

2. MNIST Dataset


×