Source code nhỏ giúp hỗ trợ nhận dạng ảnh với input là một ảnh bất kỳ và output là nội dung của bức ảnh đó
Trang 2LỜI NÓI ĐẦU
Là một lĩnh vực con của công nghệ Trí tuệ nhân tạo (AI), Machinelearning 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 ưunhấ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à chophép máy tính tìm thấy những thông tin, giá trị ẩn sâu mà không được lậptrì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ệncá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ấtsắc
Trang 3LỜ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ễnThị Tính đã nhiệt tình hướng dẫn em hoàn thành tốt nhiệm vụ trong thời gianthự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áothực tập, khó tránh khỏi sai sót, rất mong các thầy, cô bỏ qua Đồng thời dotrì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áokhông thể tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đónggóp của thầy, cô để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốthơn bài báo cáo tốt nghiệp sắp tới
Em xin chân thành cảm ơn!
Trang 4NHẬ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
Trang 5Mục Lục
Trang 6CHƯƠNG I – CƠ SỞ LÝ LUẬN
TensorFlow là một thư viện phần mềm mã nguồn mở dành chomachine learning (máy học) trong nhiều loại hình tác vụ nhận thức và hiểungôn ngữ TensorFlow hiện đang được sử dụng rất nhiều trong việc nghiêncứ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ọngnó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ấyphé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ọcsâu của DistBelief trong các sản phẩm thương mại của Google, baogồm Google Search ,Google Voice Search, Google Photos, GoogleMaps, 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ảithiệ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 choviệc tính toán đa năng trên các GPU) Nó chạy trên Linux hoặc Mac OS X 64-
Trang 7bit 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 sangTensorFlow để phục vụ cho việc nghiên cứu và sản xuất Thư viện thuật toánnà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ìmhiể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ự conngười Tên TensorFlow xuất phát từ hoạt động mà các mạng nơ-ron đó thựchiệ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ạchnố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 tronghơ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 chomá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ềuhơ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 nhanhquá 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ụngcá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ấntìm kiếm đáng kể, thay thế và bổ sung thuật toán tĩnh truyền thống dựa trêncác kết quả tìm kiếm
Trang 81.2 Google API
1.2.1 API là gì?
API (Application Programming Interface) là giao diện lập trình ứngdụng Mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau Nó cungcấ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ựchiệ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ậptrình ứng dụng thay đổi icon màn hình, xem thông tin máy tính, hay cáchà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ườidùng, Các hàm API của facebook cho chúng ta đăng status, đăng ảnh haycomment,
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êntừ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 GoogleMaps Ứ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ộttrang web có thể đạt được bằng cách sử dụng Static maps API, Places APIhoặ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
Trang 9Google và sử dụng mã thông báo đó để ủy quyền khi truy cập dịch vụ GoogleAPI.
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épcác nhà phát triển sử dụng các API của Google từ bên trong mã của họ, baogồ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áttriển web để dễ dàng tải các Javascript API được cung cấp bởi Google và cácnhà phát triển khác của thư viện phổ biến Google Loader cung cấp mộtphươ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 độnghoặc tự động tải cũng được hỗ trợ để nâng cao hiệu suất của ứng dụng bằngcá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ổ sungcho 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 đăngnhập Google+, cho phép người dùng đăng nhập an toàn vào các dịch vụ củabên thứ ba bằng tài khoản Google+ của họ sử dụng API của Google+.Tínhnăng này hiện khả dụng trong Android , iOS hoặc JavaScript Phổ biến baogồm nút “Sign in with Google” trong ứng dụng Android, vì việc nhập bằngchứng xác thực đăng nhập theo cách thủ công tốn nhiều thời gian do kíchthướ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 đơngiả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
Trang 10- 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ỉnhsửa hình ảnh / video, quản lý công việc hoặc để phác hoạ sơ đồ và quy trìnhcông việc.
4 App Engine apps
- Ứng dụng của App Engine là các ứng dụng web chạy trên máy ứngdụ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áctrung 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ânphối), BigQuery (một cơ sở dữ liệu mở rộng dựa trên Dremel) hoặcDataStore
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 texteditor là đã có thể viết được code python hoặc có thể dùng các công cụ caocấp hơn (IDE) như Aptana, PyCharm Các IDE thường hỗ trợ thêm quá trìnhphâ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:
Trang 11Python 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ạiAmsterdam, Hà Lan) Vì vậy, các phiên bản Python đầu tiên đều do CWI pháthà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 NationalResearch Initiatives) ở Reston, Virginia Tại đây, ông phát hành một số phiênbả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ìnhviên chuyên viết phần mềm thương mại Tại đây, ông có ý tưởng sử dụngPython với các phần mềm tuân theo chuẩn GPL Sau đó, CNRI và FSF (FreeSoftware Foundation - Tổ chức phần mềm tự do) đã cùng nhau hợp tác để làmbản quyền Python phù hợp với GPL Cùng năm đó, Guido được nhận Giảithưởng FSF vì Sự phát triển Phần mềm tự do (Award for the Advancement ofFree Software) Phiên bản 1.6.1 ra đời sau đó là phiên bản đầu tiên tuân theobả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ửalỗ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ànhviê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ủaphiê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 SoftwareFoundation
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ácphiê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 đổitrong 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ácnhau Bản hiện thực Python chính, còn gọi là CPython, được viết bằng C, và
Trang 12đượ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ềnkhá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 770Internet 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ườngJava và IronPython cho môi trường NET và Mono
Trang 133 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ặcbằng), > (lớn hơn), >= (lớn hơn hoặc bằng), == (bằng), != (khác) để so sánh 2giá 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ấutrú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 :
indentedStatementBlockForTrueCondition1elif condition2 :
indentedStatementBlockForFirstTrueCondition2else:
while expression:
statement(s)
Trang 145 Hàm
Khai báo hàm theo cú pháp:
def functionname(param, param2, ):
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ốichuỗ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")