1
LỜI NÓI ĐẦU
Là một lĩnh vực con của công nghệ Trí tuệ nhân tạo (AI), Machine
learning là phương pháp phân tích dữ liệu từ đó tự động hóa việc xây dựng
mô hình phân tích. Đây là công nghệ hứa hẹn mang lại những hỗ trợ tối ưu
nhất cho các doanh nghiệp với nhiều ứng dụng trong thế giới thực, ví dụ như
nhận dạng giọng nói và nhận diện hình ảnh.
Machine learning sử dụng các thuật toán lặp để học từ dữ liệu và cho
phép máy tính tìm thấy những thông tin, giá trị ẩn sâu mà không được lập
trình một cách rõ ràng nơi để tìm. Khía cạnh lặp lại của Machine learning là
quan trọng bởi khi các mô hình này được tiếp xúc với dữ liệu mới thì chúng
có thể thích ứng một cách độc lập. Các hệ thống Machine Learning có thể
nhanh chóng áp dụng kiến thức và đào tạo từ các bộ dữ liệu lớn để thực hiện
các công việc về nhận diện khuôn mặt, nhận dạng giọng nói, … một cách xuất
sắc.
2
LỜI CẢM ƠN!
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc tới cô Nguyễn
Thị Tính đã nhiệt tình hướng dẫn em hoàn thành tốt nhiệm vụ trong thời gian
thực tập.
Trong quá trình thực tập, cũng như là trong quá trình làm bài báo cáo
thực tập, khó tránh khỏi sai sót, rất mong các thầy, cô bỏ qua. Đồng thời do
trình độ lý luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo
không thể tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng
góp của thầy, cô để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt
hơn bài báo cáo tốt nghiệp sắp tới.
Em xin chân thành cảm ơn!
3
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
Thái Nguyên, ngày........tháng.........năm 2018
Giáo viên hướng dẫn
4
Mục Lục
5
CHƯƠNG I – CƠ SỞ LÝ LUẬN
1.1 Thư viện TensorFlow
TensorFlow là một thư viện phần mềm mã nguồn mở dành cho
machine learning (máy học) trong nhiều loại hình tác vụ nhận thức và hiểu
ngôn ngữ. TensorFlow hiện đang được sử dụng rất nhiều trong việc nghiên
cứu và sản xuất các sản phẩm thương mại của Google như: nhận dạng giọng
nói, nhận dạng hình ảnh, ...
TensorFlow ban đầu được phát triển bởi đội ngũ Google Brain cho mục
đích nghiên cứu và sản xuất của Google và sau đó được phát hành theo giấy
phép Apache 2.0 open source vào ngày 9/11/2015.
1.1.1 Lịch sử
1.1.1.1 DistBelief
Bắt đầu từ năm 2011, Google Brain xây dựng DistBelief - hệ
thống máy học thế hệ đầu tiên dựa trên Neural network và sử dụng độc quyền.
Google và các công ty Alphabet khác đã triển khai các mạng nơ-ron học
sâu của DistBelief trong các sản phẩm thương mại của Google, bao
gồm Google Search ,Google Voice Search, Google Photos, Google
Maps, Google Street View, Google Translate, Advertising và YouTube.
Google đã chỉ định một đội ngũ các nhà khoa học máy tính trong đó có
tiến sĩ Jeff Dean để đơn giản hóa và cải tiến mã nguồn của DistBelief để trở
thành một thư viện lớp ứng dụng nhanh hơn, mạnh mẽ hơn, mà sau này trở
thành TensorFlow.
Năm 2009, để giảm bớt số lỗi đáng kể trong các mạng nơ-ron mà
DistBelief sử dụng một đội ngũ được lãnh đạo bởi Geoffrey Hinton đã cải
thiện bằng cách sử dụng kỹ thuật backpropagation (giải thuật ngược) và một
số kỹ thuật cải tiến khác. Đột phá đáng chú ý nhất của Hinton là đã giảm được
đáng kể lỗi trong phần mềm nhận dạng giọng nói của Google (25%).
1.1.1.2
TensorFlow
TensorFlow là thế hệ thứ hai của hệ thống học máy của Google Brain,
với một bản cài đặt tham khảo đã phát hành dưới dạng phần mềm mã nguồn
mở vào ngày 9/11/2015.
Trong khi bản cài đặt tham khảo chạy trên một thiết bị đơn, TensorFlow
có thể chạy trên nhiều CPU và GPU (với nhiều mở rộng CUDA tùy chọn cho
việc tính toán đa năng trên các GPU). Nó chạy trên Linux hoặc Mac OS X 646
bit hoặc các hệ thống máy chủ, cũng như trên các nền tảng điện toán di động,
bao gồm Android và iOS của Apple.
Các tính toán của TensorFlow được thể hiện dưới dạng các biểu đồ
dataflow chi tiết. Nhiều nhóm tại Google đã chuyển từ DistBelief sang
TensorFlow để phục vụ cho việc nghiên cứu và sản xuất. Thư viện thuật toán
này bắt nguồn từ nhu cầu của Google để hướng dẫn các hệ thống máy tính tìm
hiểu và lý luận tương tự cách thức của con người, vì vậy mà các ứng dụng
được xuất phát từ đây có thể đảm nhận các vai trò và chức năng tương tự con
người. Tên TensorFlow xuất phát từ hoạt động mà các mạng nơ-ron đó thực
hiện trên mảng dữ liệu đa chiều. Các mảng này được gọi là “tensor”(các mạch
nối tiếp).
1.1.1.3
Đơn vị xử lý Tensor (TPU)
Vào tháng 5/2016, Google công bố bộ xử lý Tensor (TPU), một ASIC
được xây dựng đặc biệt cho máy học và được điều chỉnh cho TensorFlow.
Google đã vận hành các TPU bên trong các Trung tâm dữ liệu của mình trong
hơn một năm và đã tìm ra cách để tạo ra hiệu suất tối ưu hóa tốt hơn dành cho
máy học. TPU là một máy tăng tốc AI có thể lập trình được tập trung vào một
số lượng lớn thuật toán có mức chính xác thấp và có khả năng ứng dụng nhiều
hơn trong các mô hình suy luận thực tế chứ không chỉ là huấn luyện chúng.
1.1.2 Tính năng
TensorFlow hỗ trợ cả hai ngôn ngữ c và python.
TensorFlow có thể chạy trên nhiều CPU cũng như GPU giúp đẩy nhanh
quá trình huấn luyện cũng như xử lý dữ liệu thực từ mô mình đã được học.
Ngoài ra với việc có thể sử dụng thư viện này trên các hệ thống cloud sẽ làm
đẩy nhanh hiệu năng của các hệ thống sử dụng TensorFlow.
Với khả năng chạy trên nhiều hệ điều hành như bao gồm cả iOS,
Android, hứa hẹn sẽ phát triển được các ứng dụng thông minh nhờ áp dụng
các tính năng nổi bật của Deep Learning.
1.1.3 Ứng dụng
Trong số các ứng dụng rộng rãi mà TensorFlow làm nền tảng, bao gồm
cả phần mềm tự động tạo phụ đề cho hình ảnh, chẳng hạn như DeepDream.
Google chính thức triển khai thực hiện RankBrain vào ngày 26/10/2015, được
hỗ trợ bởi TensorFlow, RankBrain hiện tại có thể xử lý một lượng truy vấn
tìm kiếm đáng kể, thay thế và bổ sung thuật toán tĩnh truyền thống dựa trên
các kết quả tìm kiếm.
7
1.2 Google API
1.2.1 API là gì?
API (Application Programming Interface) là giao diện lập trình ứng
dụng. Mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau. Nó cung
cấp cho người lập trình các hàm tương tác với cơ sở dữ liệu, lập trình thực
hiện các thao tác với hệ điều hành hay phần mềm đó. Hầu hết các hàm API
được chứa trong các file DLL.
Ví dụ: Các hàm API của hệ điều hành windows cho phép chúng ta lập
trình ứng dụng thay đổi icon màn hình, xem thông tin máy tính, ... hay các
hàm API của google cho phép lập trình viên lấy thông tin, sửa thông tin người
dùng,...Các hàm API của facebook cho chúng ta đăng status, đăng ảnh hay
comment,...
Vậy API có phải một ngôn ngữ lập trình không? Câu trả lời là không.
Các hàm API cũng như các hàm bình thường mà chúng ta hay viết và trên
từng ngôn ngữ khác nhau cũng có các bộ API tương ứng khác nhau. Ví dụ
như Google API có bộ cho .NET, PHP,.. Và mỗi bộ API hầu như đều có
hướng dẫn sử dụng rất cụ thể và chi tiết.
1.2.2 Google API
1.2.2.1 Tổng quan
Google API là một tập hợp các giao diện lập trình ứng dụng ( API )
được phát triển bởi Google cho phép giao tiếp với các Dịch vụ của Google và
tích hợp với các dịch vụ khác như Search, Gmail, Translate hoặc Google
Maps. Ứng dụng của bên thứ ba có thể sử dụng các API này để tận dụng hoặc
mở rộng chức năng của các dịch vụ hiện có.
Các API cung cấp chức năng như phân tích, học máy như một dịch vụ
(API dự đoán) hoặc truy cập vào dữ liệu người dùng (khi được phép đọc dữ
liệu). Một ví dụ quan trọng khác là một bản đồ Google được nhúng vào một
trang web có thể đạt được bằng cách sử dụng Static maps API, Places API
hoặc Google Earth API.
1.2.2.2 Xác thực và ủy quyền (Authentication and authorization)
Việc sử dụng một số API đòi hỏi xác thực và ủy quyền bằng cách sử
dụng giao thức OAuth 2.0. OAuth 2.0 là một giao thức đơn giản. Để bắt đầu,
ta cần lấy thông tin đăng nhập từ bảng điều khiển dành cho nhà phát triển.
Sau đó, ứng dụng khách có thể yêu cầu mã truy cập từ máy chủ ủy quyền của
8
Google và sử dụng mã thông báo đó để ủy quyền khi truy cập dịch vụ Google
API.
1.2.2.3 Thư viện người dùng (Client libraries)
Có các thư viện người dùng bằng nhiều ngôn ngữ khác nhau cho phép
các nhà phát triển sử dụng các API của Google từ bên trong mã của họ, bao
gồm Java , JavaScript , .NET , Objective-C , PHP và Python .
Các Google Loader là một Javascript thư viện cho phép các nhà phát
triển web để dễ dàng tải các Javascript API được cung cấp bởi Google và các
nhà phát triển khác của thư viện phổ biến. Google Loader cung cấp một
phương thức JavaScript để tải một API cụ thể (còn gọi là modul), trong đó có
thể chỉ định các cài đặt bổ sung như phiên bản API, ngôn ngữ, vị trí, các gói
được chọn, gọi lại và các tham số khác cụ thể cho một API cụ thể. Tải động
hoặc tự động tải cũng được hỗ trợ để nâng cao hiệu suất của ứng dụng bằng
cách sử dụng API đã tải.
1.2.2.4 Tập lệnh Google Apps (Google Apps Script)
Google Apps Script là nền tảng điện toán đám mây cho phép các nhà
phát triển viết các tập lệnh có thể điều khiển API của các dịch vụ như
Calendar, Docs, Drive, Gmail, Sheets và dễ dàng tạo ra các tiện ích bổ sung
cho các dịch vụ này bằng các ứng dụng dựa trên chromium (crom).
1.2.2.5 Các trường hợp sử dụng phổ biến (Common use cases)
1. Đăng ký người dùng
- Đăng ký người dùng thông thường được thực hiện thông qua đăng
nhập Google+, cho phép người dùng đăng nhập an toàn vào các dịch vụ của
bên thứ ba bằng tài khoản Google+ của họ sử dụng API của Google+.Tính
năng này hiện khả dụng trong Android , iOS hoặc JavaScript . Phổ biến bao
gồm nút “Sign in with Google” trong ứng dụng Android, vì việc nhập bằng
chứng xác thực đăng nhập theo cách thủ công tốn nhiều thời gian do kích
thước màn hình giới hạn.
-Người dùng thường đăng nhập vào tài khoản Google của họ trên thiết
bị di động nênviệc đăng nhập / đăng ký một dịch vụ mới với Google rất đơn
giản chỉ với một vài cú nhấp chuột.
2. Drive App
- Ứng dụng Drive là các ứng dụng web khác nhau (thường là bên thứ
ba) hoạt động trong Google Drive sử dụng API Drive.
9
- Người dùng có thể tích hợp các ứng dụng này vào Drive của họ từ
Chrome Store trực tuyến cho phép họ làm việc hoàn toàn trong đám mây.Có
nhiều ứng dụng có sẵn cho chỉnh sửa tài liệu (Google Docs, Sheets), chỉnh
sửa hình ảnh / video, quản lý công việc hoặc để phác hoạ sơ đồ và quy trình
công việc.
3. Custom Search
-Tìm kiếm tùy chỉnh cho phép các nhà phát triển web cung cấp tìm
kiếm trang web của riêng họ bằng cách nhúng một hộp tìm kiếm tùy chỉnh và
sử dụng API tìm kiếm tuỳ chỉnh(Custom search API). Họ có thể tùy chỉnh kết
quả tìm kiếm và kiếm tiền từ các quảng cáo được hiển thị bằng cách sử dụng
AdSense cho tìm kiếm.
4. App Engine apps
- Ứng dụng của App Engine là các ứng dụng web chạy trên máy ứng
dụng của Google, nền tảng máy tính điện toán đám mây như một dịch vụ
(PaaS) cho phép các nhà phát triển web chạy các trang web của họ trong các
trung tâm dữ liệu của Google. Những ứng dụng web thường tận dụng lợi thế
của các API để thao tác các dịch vụ như hàng tác vụ (một hàng đợi phân
phối), BigQuery (một cơ sở dữ liệu mở rộng dựa trên Dremel) hoặc
DataStore.
5. Gadgets
- Gadgets là các ứng dụng nhỏ được xây dựng trong HTML,
JavaScript, Flash và Silverlight có thể được nhúng trong các trang web và các
ứng dụng khác. Chúng có thể chạy trên nhiều trang web và sản phẩm.
1.3 Tổng quan về ngôn ngữ Python
1.3.1 Lịch sử phát triển
Hiện nay, Python là một trong những ngôn ngữ lập trình đang được chú
ý bởi tính đa dạng về ứng dụng, thư viện phong phú và cộng đồng sử dụng
đông đảo. Python hỗ trợ hầu hết các nền tảng và rất dễ tìm thấy sẵn trên một
số hệ điều hành như Mac OS... Công cụ phát triển: Chỉ cần dùng một text
editor là đã có thể viết được code python hoặc có thể dùng các công cụ cao
cấp hơn (IDE) như Aptana, PyCharm...Các IDE thường hỗ trợ thêm quá trình
phân tích cú pháp dòng lệnh, debug.... Quá trình phát triển của Python có thể
được chia thành các giai đoạn sau:
10
Python 1: Bao gồm các bản phát hành 1.x. Giai đoạn này, kéo dài từ
đầu đến cuối thập niên 1990. Từ năm 1990 đến 1995, Guido làm việc tại CWI
(Centrum voor Wiskunde en Informatica - Trung tâm Toán-Tin học tại
Amsterdam, Hà Lan). Vì vậy, các phiên bản Python đầu tiên đều do CWI phát
hành. Phiên bản cuối cùng phát hành tại CWI là 1.2.
Vào năm 1995, Guido chuyển sang CNRI (Corporation for National
Research Initiatives) ở Reston, Virginia. Tại đây, ông phát hành một số phiên
bản khác. Python 1.6 là phiên bản cuối cùng phát hành tại CNRI.
Sau bản phát hành 1.6, Guido rời bỏ CNRI để làm việc với các lập trình
viên chuyên viết phần mềm thương mại. Tại đây, ông có ý tưởng sử dụng
Python với các phần mềm tuân theo chuẩn GPL. Sau đó, CNRI và FSF (Free
Software Foundation - Tổ chức phần mềm tự do) đã cùng nhau hợp tác để làm
bản quyền Python phù hợp với GPL. Cùng năm đó, Guido được nhận Giải
thưởng FSF vì Sự phát triển Phần mềm tự do (Award for the Advancement of
Free Software). Phiên bản 1.6.1 ra đời sau đó là phiên bản đầu tiên tuân theo
bản quyền GPL. Tuy nhiên, bản này hoàn toàn giống bản 1.6, trừ một số sửa
lỗi cần thiết.
Python 2: Vào năm 2000, Guido và nhóm phát triển Python dời đến
BeOpen.com và thành lập BeOpen PythonLabs team. Phiên bản Python 2.0
được phát hành tại đây. Sau khi phát hành Python 2.0, Guido và các thành
viên PythonLabs gia nhập Digital Creations.
Python 2.1 ra đời kế thừa từ Python 1.6.1 và Python 2.0. Bản quyền của
phiên bản này được đổi thành Python Software Foundation License. Từ thời
điểm này trở đi, Python thuộc sở hữu của Python Software Foundation (PSF),
một tổ chức phi lợi nhuận được thành lập theo mẫu Apache Software
Foundation.
Python 3: Còn gọi là Python 3000 hoặc Py3K. Dòng 3.x sẽ không hoàn
toàn tương thích với dòng 2.x, tuy vậy có công cụ hỗ trợ chuyển đổi từ các
phiên bản 2.x sang 3.x. Nguyên tắc chủ đạo để phát triển Python 3.x là "bỏ
cách làm việc cũ nhằm hạn chế trùng lặp về mặt chức năng của Python".
Trong PEP (Python Enhancement Proposal) có mô tả chi tiết các thay đổi
trong Python .
1.3.2 Các bản thực hiện
Python được viết từ những ngôn ngữ khác, tạo ra những bản hiện thực khác
nhau. Bản hiện thực Python chính, còn gọi là CPython, được viết bằng C, và
11
được phân phối kèm một thư viện chuẩn lớn được viết hỗn hợp bằng C và
Python. CPython có thể chạy trên nhiều nền và khả chuyển trên nhiều nền
khác. Dưới đây là các nền mà trên đó CPython có thể chạy.
Các hệ điều hành họ Unix: AIX, Darwin, FreeBSD, Mac OS X, NetBSD,
Linux, OpenBSD, Solaris,…
Các hệ điều hành dành cho máy desktop: Amiga, AROS, BeOS, Mac OS 9,
Microsoft Windows, OS/2, RISC OS.
Các hệ thống nhúng và các hệ đặc biệt: GP2X, Máy ảo Java, Nokia 770
Internet Tablet, Palm OS, PlayStation 2, PlayStation Portable, Psion, QNX,
Sharp Zaurus, Symbian OS, Windows CE/Pocket PC, Xbox/XBMC,
VxWorks.
Các hệ máy tính lớn và các hệ khác: AS/400, OS/390, Plan 9 from Bell Labs,
VMS, z/OS.
Ngoài CPython, còn có hai hiện thực Python khác: Jython cho môi trường
Java và IronPython cho môi trường .NET và Mono.
1.3.3 Cú pháp
1. Biến số
Khai báo biến bằng một câu lệnh gán.
a=1
Có thể gán nhiều loại giá trị (số, chuỗi) cho một biến.
a = 'Hello World'
a = [1, 2, 3]
a = [1.2, 'Hello', 'W', 2]
2. Toán tử số học
Python cũng hỗ trợ một số toán tử toán học thông dụng như:
+ : phép cộng
- : phép trừ
* : phép nhân
/ : phép chia
%: phép chia lấy dư (modulo)
12
3. Boolean và Toán tử logic
Giá trị đúng và sai tương ứng là True và False
not để đảo giá trị.
and phép tính logic và (AND)
or phép tính logic hoặc (OR)
Một số phép so sánh thông thường như < (bé hơn), <= (bé hơn hoặc
bằng), > (lớn hơn), >= (lớn hơn hoặc bằng), == (bằng), != (khác) để so sánh 2
giá trị.
Hỗ trợ dạng so sánh kép như:
1 < x < 3 # True
10 < x < 20 # False
4. Cấu trúc điều khiển
Python hỗ trợ một số cấu trúc điều khiển thông dụng. Hầu hết các cấu
trúc điều khiển đều dựa vào thụt đầu dòng (indention) để tạo thành một block
xử lý, thay vì sử dụng { ...} như các ngôn ngữ khác (PHP, Javascript)
a/Cấu trúc điều khiển if...elif...else
if condition1 :
indentedStatementBlockForTrueCondition1
elif condition2 :
indentedStatementBlockForFirstTrueCondition2
else:
indentedStatementBlockForEachConditionFalse
b/ Switch...case
Python không có cấu trúc switch ...case
c/ For...in
for iterating_var in sequence:
statements(s)
d/ While
while expression:
statement(s)
13
5. Hàm
Khai báo hàm theo cú pháp:
def functionname(param, param2,..):
statements(s)
Ví dụ: Hàm tính tổng 2 số
def sum(a, b):
return (a+b)
6. Xử lý chuỗi
Một chuỗi có thể khai báo bằng dấu nháy đôi " hoặc đơn ' . Ví dụ các
chuỗi sau:
str1 = "Hello"
str2 = 'world'
Có thể truy xuất từng ký tự trong một chuỗi theo hình thức index, ví dụ:
str1[0] , str1[1] ...
Có thể sử dụng 3 dấu nháy (đôi hoặc đơn) để khai báo chuỗi trên nhiều
dòng. Ví dụ: paragraph = """This is line 1
This is line 2
This is line 3"""
a/ Nối chuỗi
Có thể tạo một chuỗi dài từ việc nối các chuỗi lại theo cú pháp:
str = str1 + " " + str2
b/ Trích xuất chuỗi con
Có thể tạo các chuỗi con thông qua toán tử lấy khoảng [start:end]
(range). Mặc định start là từ vị trí đầu chuỗi ( 0 ) và end là đến vị trí cuối
chuỗi.
Ví dụ: str = 'Hello world'
print str[0:4]
(Hiển thị "Hell")
print str[:4]
(Hiển thị "Hell")
print str[-3:]
(Hiển thị "rld")
14
print str[6:-3]
(Hiển thị "wo")
c/ Lấy độ dài của chuỗi
Sử dụng hàm len(...) để trả về độ dài của chuỗi.
Ví dụ: count = len("Hello world")
(count có giá trị 11)
d/ Tìm & thay thế nội dung
Có thể tìm và thay thế trong chuỗi bằng cách gọi phương thức
replace(search, replace[, max]) của một chuỗi. Ví dụ:
str = 'Hello world'
newstr = str.replace('Hello','Bye')
print newstr
(Sẽ hiển thị chuỗi "Bye world" trên màn hình)
e/ Tìm vị trí chuỗi con
Có thể tìm vị trí của một chuỗi con trong chuỗi lớn bằng cách gọi
phương thức find(str, beg=0 end=len(string)) . Bắt đầu là vị trí 0 , nếu không
tìm ra thì trả về -1 .Ví dụ:
str = 'Hello world'
print str.find('world')
(hiển thị 6)
print str.find('Bye');
(hiển thị -1)
Hàm find() sẽ tìm theo thứ tự từ trái qua phải của chuỗi, tức là từ lần
xuất hiện đầu tiên. Có thể dùng hàm rfind() để tìm theo vị trí từ cuối chuỗi về
phía trước.
f/ Tách chuỗi
Có thể tách chuỗi dựa theo một chuỗi delimeter bằng cách gọi phương
thức split(str="", num=string.count(str)) .
Ví dụ:
str = 'Hello world'
print str.split(' ')
(Trả về một mảng có 2 phần tử là 2 chuỗi "Hello" và "world")
15
Có thể sử dụng hàm splitlines() để tách chuỗi theo từng hàng và loại bỏ
ký tự NEWLINE.
g/ Trim ký tự khoẳng trắng
Có thể loại bỏ các ký tự (mặc định là ký tự khoảng trắng) trước và sau
một chuỗi, bằng cách gọi các phương thức sau:
strip([chars]) : loại bỏ trước và sau chuỗi
lstrip([chars]) : loại bỏ phía trước chuỗi
rstrip([chars]) : loại bỏ phía sau chuỗi
h/ Một số hàm xử lý chuỗi
isnumeric() : Kiểm tra một chuỗi có phải là chuỗi số
lower() : Chuyển chuỗi hết thành chữ thường
upper() : Chuyển chuỗi hết thành chữ HOA
1.3.2 Xử lý hình ảnh
Sử dụng thư viện Pillow (PIL Fork) để tiến hành các thao tác xử lý hình
ảnh đơn giản như resize, crop, rotate...
1.3.2.1 Cài đặt PIL
Vào trang web sau để download /cài đặt package PIL cho python của
bạn Sau khi cài đặt thì
có thể sử dụng các module trong package IPL from PIL import Image
1.3.2.2 Mở file
from PIL import Image
img = Image.open("photo.jpg")
Sau khi mở file hình thành công thì có thể thao tác trên đối tượng img .
1.3.2.3 Ghi file
Từ đối tượng Image có thể lưu file xuống máy tính bằng phương thức
save(path,type) . Ví dụ: im.save('photo_new.jpg', 'JPEG')
1.3.2.4 Tạo thumbnail
Sử dụng phương thức thumbnail như sau:
from PIL import Image
im = Image.open('photo.jpg')
im.thumbnail((100, 100))
im.save('photo_thumbnail.jpg', 'JPEG')
16
thumbnail không trả về image mới mà thực hiện trên object image đang
gọi.
1.3.3 Xử lý file JSON
JSON là một trong những định dạng file trao đổi dữ liệu thông dụng
nhất hiện nay. Với kiến trúc đơn giản và tương đồng với cấu trúc của Python
nên việc thao tác JSON trên Python rất dễ hiểu.
1.3.3.1 Load file từ Internet
Thông thường dữ liệu JSON được lấy từ nguồn khác (như file,
internet..) nên chương này sẽ bắt đầu bằng cách hướng dẫn download một file
JSON từ Internet và sau đó mới parsing nội dung JSON download. Sử dụng
module urllib2 để download file và module json để encode/decode JSON
data.
Ví dụ:
import urllib2
import json
response=urllib2.urlopen(' />/repos')
data = json.load(response)
print data
1.3.3.2 Parsing JSON Data
Nếu như đã có JSON data dưới dạng chuỗi, muốn parsing chuỗi này
thành Data thì sử dụng như cách dưới đây:
import json
mystring = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
data = json.loads(mystring)
print data
1.3.3.3 Encoding JSON Data
Nếu như đã có một biến và muốn encode thành JSON string thì có thể
dùng theo cách sau:
import json
mydata = {'name': 'John', 'age': 10}
jsonstring = json.dumps(mydata)
17
print jsonstring
1.3.4 Xử lý yêu cầu
Ngày nay, với sự phong phú của các ứng dụng và nhu cầu kết nối ngày
càng lớn thì Restful là một trong những mô hình web service được nhiều công
ty sử dụng. Do đó, việc có thể kết nối đến các Restful web service là một kỹ
năng cần thiết cho các lập trình viên. Một trong những thư viện nổi tiếng nhất
trong Python để làm việc với các Restful web service, đó là requests .
1.3.4.1 Cài đặt
Cài đặt nhanh chóng thông qua pip như sau:
$ sudo pip install requests
1.3.4.2 Request
Hỗ trợ sẵn các phương thức tương ứng cho Http request như GET,
POST, PUT, DELETE...
import requests
r = requests.get(' />r = requests.post(" />r = requests.put(" />r = requests.delete(" />r = requests.head(" />r = requests.options(" />GET Query string
Đối với các request GET , có thể truyền tham số đường dẫn thông qua
tham số params khi gọi phương thức get() .
Ví dụ: import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get(" params =payload)
print(r.url)
Request Body
Trong hầu hết trường hợp các request như POST, PUT thường cần
truyền dữ liệu khi request, có thể sử dụng tham số data để truyền data lên kèm
request.
Ví dụ: import requests
18
payload = {'key1': 'value1',v'key2': 'value2'}
r = requests.post(" data =payload)
1.3.4.3 Upload file
Có thể gởi thêm tham số files để upload file kèm theo request. Ví dụ:
import requests
url = ' />files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
1.3.4.4 Response
Sau khi gọi các phương thức tương ứng để request, bạn sẽ có đối tượng
thuộc class Response . Đối tượng này có một số thông tin như sau:
status_code : HTTP Status server trả về
headers: Các thông tin header mà server trả về dưới dạng Dictionary.
cookies: Nếu server có trả về cookie thì có thể sử dụng thuộc tính này
để lấy các cookie.
text : Trả về nội dung response
19
CHƯƠNG II - ỨNG DỤNG TENSORFLOW NHẬN DẠNG ẢNH ĐƠN
GIẢN
2.1 Nhận dạng hình ảnh
2.1.1 Ứng dụng TensorFlow nhận dạng ảnh
2.1.1.1 Cơ sở lý thuyểt
Bộ não của chúng ta làm cho tầm nhìn có vẻ dễ dàng. Nó khiến cho con
người dễ dàng nhận biết được đâu một con sư tử hoặc đâu là một chiếc xe
tăng trong một bức ảnh, đọc một dấu hiệu, hoặc nhận ra một khuôn mặt của
con người. Nhưng đây thực sự là những vấn đề khó giải quyết với máy tính,
chúng chỉ dễ dàng bởi bộ não của con người vì não người có khả năng hiểu
được hình ảnh rất tốt.
Trong vài năm gần đây, lĩnh vực học máy đã có những tiến bộ to lớn
trong việc giải quyết những vấn đề khó khăn này. Đặc biệt, một mô hình được
gọi là mạng thần kinh xoắn nếp sâu (convolutional neural network) có thể đạt
được hiệu quả hợp lý đối với các nhiệm vụ nhận dạng hình ảnh khó khăn phù hợp hoặc vượt quá hiệu năng của con người ở một số lĩnh vực.
Các nhà nghiên cứu đã chứng minh sự tiến bộ vững chắc trong tầm
nhìn máy tính bằng cách xác nhận công việc của họ đối với ImageNet - một
tiêu chuẩn học thuật cho tầm nhìn máy tính. Các mô hình liên tục cho thấy
những cải tiến thông qua những thành tựu mới nhất của: QuocNet , AlexNet ,
Inception (GoogLeNet) , BN-Inception-v2. Các nhà nghiên cứu cả trong và
ngoài Google đã xuất bản các bài báo mô tả tất cả các mô hình này nhưng kết
quả vẫn khó tái sản xuất. Các nhà phát triển TensorFlow đang thực hiện bước
tiếp theo bằng cách phát hành mã để chạy nhận dạng hình ảnh trên mô hình
mới nhất của họ, Inception-v3.
Inception-v3 được đào tạo cho ImageNet Large Visual Recognition
Challenge sử dụng dữ liệu từ năm 2012. Đây là một nhiệm vụ tiêu chuẩn
trong computer vision, nơi mà mô hình cố gắng để phân loại toàn bộ hình ảnh
trong số 1000 classes , như "Zebra", "Dalmatian", và "Dishwasher".
Ví dụ: đây là kết quả từ AlexNet phân loại một số hình ảnh:
20
2.1.1.2 Hướng dẫn sử dụng Inception-v3 với Python API
“classify_image.py” tải mô hình được đào tạo từ tensorflow.org khi
chương trình được chạy lần đầu tiên. Bạn sẽ cần khoảng 200M dung lượng
trống có sẵn trên đĩa cứng của bạn.
Bắt đầu bằng cách sao chép mô hình TensorFlow repo từ GitHub. Chạy
các lệnh sau:
cd models/tutorials/image/imagenet
python classify_image.py
Lệnh trên sẽ phân loại một hình ảnh cung cấp của gấu trúc.
Nếu mô hình chạy đúng, tập lệnh sẽ hiện ra kết quả:
21
Nếu muốn cung cấp hình ảnh JPEG khác, ta có thể làm như vậy bằng
cách chỉnh sửa các image_file.
Nếu cần tải dữ liệu mô hình vào một thư mục khác, ta cần trỏ
model_dir vào thư mục đã sử dụng.
2.1.2 API Google nhận dạng hình ảnh
Google Cloud Vision API cho phép các nhà phát triển hiểu nội dung
của một hình ảnh bằng cách đóng gói các mô hình học máy mạnh mẽ bằng
một API REST dễ sử dụng. Nó nhanh chóng phân loại hình ảnh thành hàng
ngàn chủng loại (ví dụ: "thuyền buồm", "sư tử", "tháp Eiffel"), phát hiện các
đối tượng và khuôn mặt trong hình ảnh , tìm và đọc những từ được in trong
ảnh. Người dùng thể xây dựng siêu dữ liệu trong danh mục hình ảnh của
mình. Phân tích hình ảnh được tải lên trong yêu cầu hoặc tích hợp với bộ nhớ
hình ảnh của bạn trên Google Cloud Storage.
API REST xác định một tập các chức năng mà các nhà phát triển có thể
thực hiện các yêu cầu và nhận phản hồi thông qua giao thức HTTP như GET
và POST
Một ví dụ nhận dạng hình ảnh bằng API của Google
-Tải lên hình ảnh từ máy tính của người dùng
- Ví dụ tải lên hình ảnh như sau
22
- Kết quả sau khi phân tích
23
API của Google còn phát hiện ra các nội dung không phù hợp. Được hỗ
trợ bởi Google SafeSearch, dễ dàng kiểm duyệt nội dung từ hình ảnh của bạn.
Vision API cho phép bạn phát hiện và ngăn chặn các loại nội dung không phù
hợp khác nhau từ nội dung người lớn đến bạo lực.
Ví dụ về nhận dạng nội dung ảnh bạo lực:
Load một ảnh có nội dung bạo lực như sau
Sau khi phân tích, kết quả hiển thị như sau:
24
2.1.3 Tương lai của API TensorFlow
Google vừa phát hành bộ API nhận diện đối tượng TensorFlow mới của
mình, để giúp các nhà phát triển và các nhà nghiên cứu xác định các đối
tượng trong những bức ảnh dễ dàng hơn. Google đang cố gắng cung cấp
chúng một cách đơn giản và hiệu năng cao nhất có thể - các mô hình vừa
được phát hành có hiệu năng rất tốt khi chạy benchmark và đang được sử
dụng thường xuyên trong nghiên cứu.
Các mô hình này có bộ API nhận diện với những mạng lưới thần kinh
nhân tạo dạng xoắn nặng nề và các mô hình tinh gọn được thiết kế để hoạt
động trên những cỗ máy ít phức tạp hơn – bộ dò đơn MobileNets được tối ưu
để có thể chạy trên thiết bị di động theo thời gian thực.
Google cũng cho ra mắt họ một loạt mô hình thị giác MobileNets cho
các máy tính cấu hình thấp. Các mô hình này có thể xử lý các tác vụ như nhận
diện đối tượng, nhận diện khuôn mặt và nhận diện các mốc vị trí trong không
gian.
Các smartphone ngày nay đều không có những tài nguyên điện toán
như những chiếc máy tính để bàn hay các thiết bị máy chủ, làm các nhà phát
triển chỉ còn hai lựa chọn: Dựa vào các mô hình máy học chạy trên đám mây
nhưng sẽ làm gia tăng độ trễ, và đòi hỏi phải có kết nối internet – do vậy nó
khó có thể áp dụng trong nhiều trường hợp sử dụng thông thường. Một cách
25