Why do we need a Token in Restful services?
- Create a random but unique token and keep track of that token on the server side. This is how Server Side Session works. We have "Session Id", a unique & random string.
- Create a token which contains everything in it and then you don't track anything on server.
- What will be format of token & how to represent data in it?
- How to secure the content of token so the end user can't read it?
- How to detect if token is tempered by end user?
- oAuth Bearer Token
- It stores data in the form of claims (key/value pairs)
- Token is encrypted.
- End User needs algorithm & key to decrypt it.
- Json Web Token
Json Web Tokens (check https://jwt.io/ for example)
- JWT token is a string and has three parts separated by dot (.) a) Header b) Payload c) Signature
- Header & Payload are JSON objects
- Header contains algorithm & type of token which is jwt
- Payload contains claims (key/value pairs) + expiration date + aud/issuer etc.
- Signature is HASH value computed using Base64(Header) +"." + Base64(Payload). This information is passed to an algorithm with a secret key.
- Token structure is base64(header) + "." + base64(payload) + "." + hash
- Client sends a request to server for token
- Server generates a JWT (which contains a hash). Hash is generated using a secret key.
- Client receives the token and stores it somewhere locally.
- Client sends the token in future requests.
- Server gets the token from request header, computes Hash again by using a) Header from token b) payload from token c) secret key which server already has.
- If ("newly computed hash" = "hash came in token"), token is valid otherwise it is tempered or not valid.
- How can we create Json Web Token in ASP.NET Web API
- How to validate a JWT bearer token if it comes in a request
- How to get claims data
Creating & Validating JWT in ASP.NET Web API
- Add following nuget Package (You may choose latest version available for .NET Framework version you are using)
System.IdentityModel.Tokens.Jwt 5.5.0
- Open Values Controller (or we may create a new API controller) and add following namespaces
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
- [HttpGet]
- public Object GetToken()
- {
- string key = "my_secret_key_12345"; //Secret key which will be used later during validation
- var issuer = "http://mysite.com"; //normally this will be your site URL
- var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
- var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
- //Create a List of Claims, Keep claims name short
- var permClaims = new List<Claim>();
- permClaims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()));
- permClaims.Add(new Claim("valid", "1"));
- permClaims.Add(new Claim("userid", "1"));
- permClaims.Add(new Claim("name", "bilal"));
- //Create Security Token object by giving required parameters
- var token = new JwtSecurityToken(issuer, //Issure
- issuer, //Audience
- permClaims,
- expires: DateTime.Now.AddDays(1),
- signingCredentials: credentials);
- var jwt_token = new JwtSecurityTokenHandler().WriteToken(token);
- return new { data = jwt_token };
- }
- config.Routes.MapHttpRoute(
- name: "DefaultApi",
- routeTemplate: "api/{controller}/{action}/{id}",
- defaults: new { id = RouteParameter.Optional }
- );
- {"data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ODZlZmY0OS00OWQ2LTQ4YjQtODM4NC0yYTA5NDYxODJmN2YiLCJ2YWxpZCI6IjEiLCJ1c2VyaWQiOiIxIiwibmFtZSI6ImJpbGFsIiwiZXhwIjoxNTcwNjMwMzMwLCJpc3MiOiJodHRwOi8vbXlzaXRlLmNvbSIsImF1ZCI6Imh0dHA6Ly9teXNpdGUuY29tIn0.06vzYfiSpj1X9s0-CL2nE7NH4LloASMikZCNfHIJ8tY"}
- GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
How to Validate JWT Token?
- Microsoft.Owin.Security.Jwt 4.0.1
- Microsoft.AspNet.WebApi.Owin 5.2.3
- Microsoft.Owin.Host.SystemWeb 4.0.1
- using Microsoft.Owin.Security.Jwt;
- using Microsoft.Owin.Security;
- using Microsoft.IdentityModel.Tokens;
- using System.Text;
- public class Startup
- {
- public void Configuration(IAppBuilder app)
- {
- app.UseJwtBearerAuthentication(
- new JwtBearerAuthenticationOptions
- {
- AuthenticationMode = AuthenticationMode.Active,
- TokenValidationParameters = new TokenValidationParameters()
- {
- ValidateIssuer = true,
- ValidateAudience = true,
- ValidateIssuerSigningKey = true,
- ValidIssuer = "http://mysite.com", //some string, normally web url,
- ValidAudience = "http://mysite.com",
- IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("my_secret_key_12345"))
- }
- });
- }
- }
- using Microsoft.Owin.Security.OAuth;
- public static void Register(HttpConfiguration config) {
- // Web API configuration and services
- config.SuppressDefaultHostAuthentication();
- config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
- // Web API routes
- config.MapHttpAttributeRoutes();
- config.Routes.MapHttpRoute(
- name: "DefaultApi",
- routeTemplate: "api/{controller}/{action}/{id}",
- defaults: new {
- id = RouteParameter.Optional
- }
- );
- }
- using System.Security.Claims;
- [HttpPost]
- public String GetName1() {
- if (User.Identity.IsAuthenticated) {
- var identity = User.Identity as ClaimsIdentity;
- if (identity != null) {
- IEnumerable < Claim > claims = identity.Claims;
- }
- return "Valid";
- } else {
- return "Invalid";
- }
- }
- [Authorize]
- [HttpPost]
- public Object GetName2() {
- var identity = User.Identity as ClaimsIdentity;
- if (identity != null) {
- IEnumerable < Claim > claims = identity.Claims;
- var name = claims.Where(p => p.Type == "name").FirstOrDefault() ? .Value;
- return new {
- data = name
- };
- }
- return null;
- }
Summary
IntelliSense#
As you type in HTML, we offer suggestions via HTML IntelliSense. In the image below, you can see a suggested HTML element closure </div> as well as a context specific list of suggested elements.

We also offer up suggestions for elements, tags, some values (as defined in HTML5), Ionic and AngularJS tags. Document symbols are also available for HTML, allowing you to quickly navigate to DOM nodes by id and class name.
You can also work with embedded CSS and JavaScript. However, note that script and style includes from other files are not followed, the language support only looks at the content of the HTML file.
You can trigger suggestions at any time by pressing Ctrl+Space.
You can also control which built-in code completion providers are active. Override these in your user or workspace settings if you prefer not to see the corresponding suggestions.
// Configures if the built-in HTML language suggests Angular V1 tags and properties.
"html.suggest.angular1": true,
// Configures if the built-in HTML language suggests Ionic tags, properties and values.
"html.suggest.ionic": true,
// Configures if the built-in HTML language suggests HTML5 tags, properties and values.
"html.suggest.html5": true
Close tags#
Tag elements are automatically closed when > of the opening tag is typed.

The matching closing tag is inserted when / of the closing tag is entered.

You can turn off autoclosing tags with the following setting:
"html.autoClosingTags": false
Color picker#
The VS Code color picker UI is now available in HTML style sections.

It supports configuration of hue, saturation and opacity for the color that is picked up from the editor. It also provides the ability to trigger between different color modes by clicking on the color string at the top of the picker. The picker appears on a hover when you are over a color definition.
Hover#
Move the mouse over HTML tags or embedded styles and JavaScript to get more information on the symbol under the cursor.

Validation#
The HTML language support performs validation on all embedded JavaScript and CSS.
You can turn that validation off with the following settings:
// Configures if the built-in HTML language support validates embedded scripts.
"html.validate.scripts": true,
// Configures if the built-in HTML language support validates embedded styles.
"html.validate.styles": true
Folding#
You can fold regions of source code using the folding icons on the gutter between line numbers and line start. Folding regions are available for all HTML elements for multiline comments in the source code.
Additionally you can use the following region markers to define a folding region:
<!-- #region --> and <!-- endregion -->
If you prefer to switch to indentation based folding for HTML use:
"[html]": {
"editor.foldingStrategy": "indentation"
},
Formatting#
To improve the formatting of your HTML source code, you can use the Format Document command Shift+Alt+F to format the entire file or Format Selection Ctrl+K Ctrl+F to just format the selected text.
The HTML formatter is based on js-beautify. The formatting options offered by that library are surfaced in the VS Code settings:
html.format.wrapLineLength: Maximum amount of characters per line.html.format.unformatted: List of tags that shouldn't be reformatted.html.format.contentUnformatted: List of tags, comma separated, where the content shouldn't be reformatted.html.format.extraLiners: List of tags that should have an extra newline before them.html.format.preserveNewLines: Whether existing line breaks before elements should be preserved.html.format.maxPreserveNewLines: Maximum number of line breaks to be preserved in one chunk.html.format.endWithNewline: End with a newline.html.format.indentInnerHtml: Indent<head>and<body>sections.html.format.wrapAttributes: Wrapping strategy for attributes:auto: Wrap when the line length is exceededforce: Wrap all attributes, except firstforce-aligned: Wrap all attributes, except first, and align attributesforce-expand-multiline: Wrap all attributesaligned-multiple: Wrap when line length is exceeded, align attributes verticallypreserve: Preserve wrapping of attributespreserve-aligned: Preserve wrapping of attributes but align
Tip: The formatter doesn't format the tags listed in the
html.format.unformattedandhtml.format.contentUnformattedsettings. Embedded JavaScript is formatted unless 'script' tags are excluded.
The Marketplace has several alternative formatters to choose from. If you want to use a different formatter, define
"html.format.enable": false in your settings to turn off the built-in formatter.
Emmet snippets#
VS Code supports Emmet snippet expansion. Emmet abbreviations are listed along with other suggestions and snippets in the editor auto-completion list.

Tip: See the HTML section of the Emmet cheat sheet for valid abbreviations.
If you'd like to use HTML Emmet abbreviations with other languages, you can associate one of the Emmet modes (such as css, html) with other languages with the emmet.includeLanguages setting. The setting takes a language id and associates it with the language id of an Emmet supported mode.
For example, to use Emmet HTML abbreviations inside JavaScript:
{
"emmet.includeLanguages": {
"javascript": "html"
}
}
We also support User Defined Snippets.
HTML custom data#
You can extend VS Code's HTML support through a declarative custom data format. By setting html.customData to a list of JSON files following the custom data format, you can enhance VS Code's understanding of new HTML tags, attributes and attribute values. VS Code will then offer language support such as completion & hover information for the provided tags, attributes and attribute values.
You can read more about using custom data in the vscode-custom-data repository.
HTML extensions#
Install an extension to add more functionality. Go to the Extensions view (Ctrl+Shift+X) and type 'html' to see a list of relevant extensions to help with creating and editing HTML.
Tip: Click on an extension tile above to read the description and reviews to decide which extension is best for you. See more in the Marketplace.
Next steps#
Read on to find out about:
- CSS, SCSS, and Less - VS Code has first class support for CSS including Less and SCSS.
- Emmet - Learn about VS Code's powerful built-in Emmet support.
- Emmet official documentation - Emmet, the essential toolkit for web-developers.
Common questions#
Does VS Code have HTML preview?#
No, VS Code doesn't have built-in support for HTML preview but there are extensions available in the VS Code Marketplace. Open the Extensions view (Ctrl+Shift+X) and search on 'live preview' or 'html preview' to see a list of available HTML preview extensions.
Khi nói đến version control system, có rất ít ứng dụng có thể vượt qua được GIT về hiệu năng. GIT được phát triển bởi Linus Torvalds trong năm 2005 và giớ đây, hàng triệu công ty đang sử dụng nó để làm trình quản lý phiên bản mã nguồn của các dự án của họ. Phần mềm mã nguồn mở có thể tải về cho Linux, Windows, Solaris và Mac, thông tin chi tiết về GIT có thể tìm thấy tại đây: basics can be retrieved here. Trong bài hướng dẫn này, các command cơ bản của Git sẽ được cung cấp.
Bạn cần chuẩn bị gì?
Trước khi bắt đầu, bạn cần chuẩn bị:
- GIT được cài trên hệ thống của bạn
Hướng dẫn sử dụng git – Các lệnh cơ bản của GIT
- git config
Một trong các lệnh được dùng nhiều nhất là git config, có thể được cấu hình cho cá nhân với các giá trị của emails, thuật toán cho diff, username và file format,… Ví dụ, command bên dưới có thể dùng cho email:
git config --global user.email sam@google.com
- git init
Lệnh này được dùng để tạo GIT repository. Cách dùng:
git init
- git add
Lệnh git add có thể được dùng để thêm file vào index. Ví dụ, command sau có thể thêm một file có tên temp.txt vào thư mục local vào index:
git add temp.txt
- git clone
Lệnh git clone được dùng với mục đích check out. Nếu respository phụ thuộc vào server từ xa, sử dụng:\
git clone alex@93.188.160.58:/path/to/repository
- Ngược lại, nếu một bản repository đang hoạt động tại local đã được tạo, hãy dùng:
git clone /path/to/repository
- git commit
Lệnh git commit được dùng để commit thay đổi từ đầu. Hãy lưu ý là thay đổi không được áp dụng cho repository của server từ xa :
git commit –m “Message to go with the commit here”
- git status
Lệnh git status hiển thị dnah sách thay đổi của files được thêm hoặc commited. Cách dùng:
git status
git push
git push là một lệnh được sử dụng nhiều của git. Một lệnh push đơn giản sẽ gửi thay đổi tới master branch của repositorys của server từ xa được chỉ định với một thư mục. Ví dụ:
git push origin master
- git checkout
Lệnh git checkout có thể được dùng để tạo branched hoặc chuyển giữa chúng. Ví dụ, lệnh sau tạo một brach mới và chuyển tới nó;
command git checkout -b <branch-name>
- Để chuyển từ branch này sang branch khác, hãy dùng:
git checkout <branch-name>
- git remote
Lệnh git remote giúp user kết nối tới repository từ xa. Lệnh sau liệt kê danh sách repositories từ xa mà đang được cấu hình::
git remote –v
- Lện này cũng giúp người dùng kết nối từ repository ở local tới remote server::
git remote add origin <93.188.160.58>
- git branch
Lệnh git branch có thể được dùng để liệt kê, tạo hoặc xóa branches. Để liệt kê tất cả các branchs đang có trong repositories, hãy dùng: git branch
Để xóa branch:
git branch –d <branch-name>
- git pull
Để merge tất cả các thay đổi trên remote repository tới thư mục đang chạy trên local, pull command cần được dùng. Cách dùng:
git pull
- git merge
Lệnh git merge được dùng để merge một branch vào một branch đang hoạt động. Cách dùng:
git merge <branch-name>
- git diff
Lệnh git diff được dùng để liệt kê xung đột. Để hiển thị xung đột với base file, sử dụng:
git diff --base <file-name>
- Command bên dưới được dùng để hiển thị mâu thuẫn giửa branches sắp được merge:
git diff <source-branch> <target-branch>
- Để hiển thị các mâu thuẫn hiện tại, sử dụng:
git diff
- git tag
- Tagging được dùng để đánh dấu commit với một handle đơn giản. Ví dụ có thể là:
- git tag 1.1.0 <insert-commitID-here>
- git log
Chạy git log cho ra danh sách commits trên branch với thông tin cần thiết. Một output đơn giản có thể là:
commit 15f4b6c44b3c8344caasdac9e4be13246e21sadw Author: Alex Hunter <alexh@gmail.com> Date: Mon Oct 1 12:56:29 2016 -0600
- git reset
Để reset index và thư mục đang chạy với lần commit cuối cùng, git reset command được dùng. Cách dùng:
git reset --hard HEAD
- git rm
git rm có thể được dùng để loại bỏ files từ torng index và thư mục đang hoạt động. Cách dùng:
git rm filename.txt
- git stash
Là một trong số ít lệnh cơ bản ít được biết đến, git stash giúp bạn lưu lại thay đổi mà chưa được commited ngay lập tức, nhưng tạm thời. Sử dụng:
git stash
git show
Để hiển thi5 thông tin về bất kỳ git object nào, hãy dùng git show. Ví dụ:
git show
- git fetch
git fetch cho phép user tải tất cả object từ remote repository mà không có trên thư mục local. Ví dụ sử dụng:
git fetch origin
- git ls-tree
Để hiện tree object với tên và mode của mỗi item, và giá trị blob’s SHA-1, sử dụng command, hãy dùng command git ls-tree. Ví dụ:
git ls-tree HEAD
- git cat-file
Sử dụng giá trị SHA-1, hiển thị loại của object bằng cách dùng command git cat-file. Ví dụ:
git cat-file –p d670460b4b4aece5915caf5c68d12f560a9fe3e4
- git grep
git grep giúp người dùng tìm kiếm qua nội dung dạng cây cho cụm từ và từ. Ví dụ, để tìm từ www.hostinger.com trong tất cả các file:
git grep "www.hostinger.vn"
- gitk
gitk là một giao diện đồ họa cho local repository có thể được kích hoạt bằng cách gõ và chạy:
gitk
- git instaweb
Với lệnh git instaweb, một web server có thể chạy command, một web server có thể chạy trên local repository. Một trình duyệt web có thể tự động được chỉ định tới nó. Ví dụ:
git instaweb –httpd=webrick
- git gc
Để tối ưu repository với garbage collection, sẽ dọn dẹp các file không cần thiết và tối ưu chúng, sử dụng:
git gc
- git archive
Lệnh git archive giúp người dùng tạo file zip hoặc file tar chứa các thành phần của một cây repository. Ví dụ:
git archive --format=tar master
- git prune
Qua lệnh git prune, objects không có bất kỳ pointers nào sẽ được xóa. Cách dùng:
git prune
- git fsck
Để thực hiện integrity check của git file system, sử dụng command git fsck. Bất kỳ object lỗi nào cũng được xác định:
git fsck
- git rebase
Lệnh git rebase được dùng để áp dụng lại commits của một branch khác. Ví dụ:
git rebase master
Kết luận
Hướng dẫn sử dụng git trên bao gồm một vài lệnh thường gặp cơ bản của git. Hãy tham khảo thêm hướng dẫn GIT GIT tutorial để các cài đặt GIT theo từng bước.
Theo hostinger.vn
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 toán học để tính toán trong machine learning và deep learning đã giúp việc tiếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Xem thêm: Hiểu thêm về Deep Learning thông qua 12 khóa học online miễn phí
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 toá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.
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
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ó.
Xem thêm: Thử làm ứng dụng tô màu bằng AI
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.

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, ngoà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 high-level abstraction lập trình để nối chúng lại với nhau.
Các ứng dụng TensorFlow có thể chạy được trên hầu hết các đối tượng thông dụng: máy local, cluster trong các đám mây, thiết bị di động iOS và Android, CPU hay GPU. Nếu bạn dùng đám mây của riêng Google, bạn có thể chạy TensorFlow trên silicon của TensorFlow Processing Unit (TPU) tùy chỉnh từ Google để tăng tốc hiệu quả hơn nữa. Các model được tạo ra bởi TensorFlow, có thể deploy trên hầu hết các thiết bị nơi chúng được sử dụng để phục vụ các dự đoán.
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.
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 toá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.
Ngoà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 hoàn toà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 soá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
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 toá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 toá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 toá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 toán được thực hiện trong quá 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 toàn các tính toá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 toá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.
Xem thêm: Nâng cao kiến thức lập trình bằng 500 khóa học computer sience
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
– 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
Ví dụ TensorFlow đơn giản
import numpy as np import tensorflow as tf
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 toá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 toán TensorFlow sẽ nhân X_1 và X_2 lại cùng nhau.

Cuối cùng, chúng ta chạy 1 session TensorFlow mà sẽ chạy đồ thị tính toá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ị
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Khi ta tạo 1 node placeholder, ta phải gửi loại dữ liệu sẽ được thêm số tại đây nên ta có thể sử dụng 1 loại dữ liệu floating-point, hãy dùng tf.float32. Chúng ta cũng cần phải cho node này 1 cái tên. Tên này sẽ xuất hiện khi ta nhìn vào phần trực quan dạng đồ thị của model. Hãy đặt tên node X_1 này bằng cách nhập 1 tham số được gọi bằng tên với 1 giá trị của X_1 và bây giờ hãy xác định X_2 theo cách tương tự.
Bước 2: Xác định phần tính toán
multiply = tf.multiply(X_1, X_2, name = "multiply")
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 toá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à toàn bộ định nghĩa cho đồ thị tính toá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 toán của ta bằng cách gọi session. Để chạy phần tính toá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.
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
Các option tải dữ liệu vào TensorFlow
Bước đầu tiên trước khi train 1 thuật toá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ả 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 toán song song. Nghĩa là TensorFlow sẽ train model qua nhiều CPU. Thúc đẩy sự tính toá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.
Tạo đường ống TensorFlow
Trong ví dụ trước, ta đã thêm thủ công 3 giá trị cho X_1 và X_2. Giờ chúng ta sẽ xem cách load dữ liệu tới TensorFlow.
Bước 1: Tạo dữ liệu
Đầu tiên, hãy dùng thư viện numpy để tạo ra 2 giá trị ngẫu nhiên.
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
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]
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
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
dataset = tf.data.Dataset.from_tensor_slices(x)
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ị.
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
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ả.
with tf.Session() as sess: # feed the placeholder with data sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
10 tài liệu lập trình đáng xem qua nhất về Tensorflow
1 – Learn TensorFlow 2.0: Implement Machine Learning and Deep Learning Models with Python

Learn TensorFlow 2.0 là quyển sách được viết bởi 2 tác giả Pramod Singh và Avish Manure. Sách bắt đầu bằng việc giới thiệu framework TensorFlow 2.0 và những thay đổi chính từ bản phát hành trước đó. Quyển này cũng tập trụng vào phần dựng các model ‘Supervised Machine Learning’ bằng cách dùng TensorFlow.
Learn TensorFlow còn dạy cho bạn cách dựng các model bằng việc dùng ‘customer estimators’. Bạn sẽ học được cách sử dụng TensorFlow để dựng các model machine learning và deep learning. Tất cả code trong sách đều có sẵn ở dạng script thực thi trên GitHub, bạn có thể thực hành nó 1 cách dễ dàng.
2 – Advanced Deep Learning with TensorFlow 2 and Keras

Advanced Deep Learning with TensorFlow 2 and Keras là 1 quyển sách của tác giả Rowel Atienza, nó dạy cho bạn những kỹ thuật deep learning cao cấp đang sẵn có ở thời điểm hiện tại.
Nó còn dạy cho bạn về deep learning, unsupervised learning bằng cách dùng các thông tin tương quan, xác định đối tượng (SSD). Sách sẽ chỉ cho bạn cách để tạo A.I. hiệu quả với các kỹ thuật tiên tiến nhất hiện tại. Trong Advanced Deep Learning with TensorFlow 2 and Keras, bạn còn được học về GANs và làm thế nào họ có thể mở khoá các cấp độ mới của hiệu năng cho Trí tuệ Nhân Tạo.

Học TensorFlow chỉ trong 1 ngày? Nghe thì ảo thật đấy nhưng trong quyển sách bởi tác giả Krishna Rungta này sẽ dạy cho bạn về môn khó nhằn bằng tiếng Anh theo cách dễ hiểu nhất. Nó còn đi kèm đồ thị, tính năng tính toán tuyệt vời. Quyển sách được khá nhiều nhà khoa học dữ liệu khuyến cáo vì độ trực quan mà nó đem lại cho mạng lưới thần kinh khi sử dụng TensorBoard.
Sách bao gồm các chủ đề như Deep learning là gì?, Machine Learning vs. Deep Learning, TensorFlow là gì? cũng như các chủ đề cao cấp hơn như Jupyter Notebook, TensorFlow trên AWS và còn nhiều nữa… Hẳn đây là 1 quyển không thể thiếu cho các bạn mới bắt đầu tìm hiểu về TensorFlow.
4 – TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers

TinyML: Machine Learning with TensorFlow Lite là quyển được viết bởi Pete Warden và Daniel Situnayke. Với cuốn tham khảo thực hành này, bạn sẽ bước vào lĩnh vực TinyML. Nó bao gồm deep learning kết hợp cùng hệ thống nhúng để tạo ra những thứ đáng kinh ngạc nhất có thể với những thiết bị tí hon.
Quyển TinyML này khá lý tưởng cho các bạn lập trình viên phần mềm lẫn lập trình viên phần cứng, nhất là những ai muốn dựng hệ thống nhúng bằng machine learning.

Natural Language Processing with TensorFlow là quyển sách viết bởi Husan Ganefedara. Bạn sẽ học cách ứng dụng các model RNN hiệu năng cao, các cell short-term memory (LSTM), vào các tác vụ Natural Language Processing. Bạn còn có thể khám phá sự chuyển ngữ neural machine và triển khai thực hiện trình chuyển ngữ neural machine.
Sau khi đọc xong quyển sách này, bạn sẽ hiểu rõ hơn về công nghệ NLP và có thể ứng dụng TensorFlow vào các ứng dụng deep learning NLP, cũng như cách thi hành các tác vụ NLP cụ thể.

TensorFlow Machine Learning Projects là quyển sách bởi bộ 3 tác giả: Ankit Jain, Armando Fandango, và Amita Kapoor. Nó sẽ dạy bạn cách dựng các dự án nâng cao cũng như bạn sẽ có thể va chạm nhiều thử thách thông dụng bằng cách sử dụng các thư viện từ TensorFlow ecosystem.
Ngoài ra, TMLP còn dạy cho bạn cách dựng các dự án đa dạng bằng real-world domains, autoencoders, các hệ thống được đề xuất, reinforcement learning, v.. v.. Khi kết thúc quyển tham khảo này, bạn sẽ có được chuyên môn cần thiết để dựng các dự án machine learning.

Hands-On Computer Vision with TensorFlow 2 được viết bởi tác giả Benjamin Planche và Eliot Andres. Quyển này sẽ giúp bạn phám phá về framework nguồn mở cho machine learning này của Google. Bạn sẽ hiểu được cách làm thế nào để hưởng lợi từ việc sử dụng mạng lưới thần kinh tích chập – convolutional neural networks (CNNs) cho các nhiệm vụ trực quan.
Sách bắt đầu với nền tảng của tầm nhìn máy tính và deep learning. Sách cũng dạy cho bạn làm thế nào để dựng 1 mạng lưới thần kinh từ con số 0 cũng như giúp bạn cách phân loại hình ảnh với các giải pháp hiện đại, như Inception và ResNet, và trích xuất nội dung cụ thể qua phương pháp You Only Look Once (YOLO).
Cuối cùng, bạn sẽ biết rõ về lý thuyết lẫn kỹ năng thực tế. Ngoài ra nó còn giúp bạn giải quyết các vấn đề nâng cao về tầm nhìn máy tính.

Viết bởi Santanu Pattanayak, Pro Deep Learning with TensorFlow cho bạn hiểu rõ về kiến thức và trực giác toán học. Nó sẽ giúp bạn phát mình ra các cấu trúc và giải pháp deep learning mới cho riêng bạn.
Sách còn cung cấp các bài thực hành chuyên môn để bạn có thể học deep learning dù chưa biết gì. Quyển PDLwT sẽ cho phép bạn tăng tốc nhanh chóng khi dùng TensorFlow, cũng như tối ưu hóa các kiến trúc deep learning khác nhau.
Mang nhiều khái niệm thực hành đa dạng về deep learning được nhấn mạnh có liên quan trong bất kỳ ngành nào. Code trong tài liệu tham khảo còny có sẵn ở dạng scrypt và iPython notebook.

Practical Deep Learning for Cloud, Mobile, and Edge là quyển sách viết bởi Anirudh Koul, Siddha Ganju, và Meher Kasam. Nếu bạn muốn dựng các ứng dụng thực hành deep learning cho đám mây, di động hay trình duyệt thì quyển này sẽ rất thích hợp cho bạn.
Sách dạy cho bạn quá trình chuyển đổi từ 1 ý tưởng trở thành 1 thứ gì đó mà mọi người có thể sử dụng. Sách còn chỉ cho bạn cách phát triển trí tuệ nhân tạo trong pham vi rộng các thiết bị, bao gồm Raspberry Pi và Google Coral. Bạn sẽ nhận được nhiều mẹo thực hành cho việc tối đa hóa độ chính xác và tốc độ các model.
10 – Deep Learning: A Practitioner’s Approach

Quyển không thể thiếu nếu bạn đang học tập và làm việc có liên quan tới lĩnh vực Deep Learning. Được viết bởi Josh Patterson và Adam Gibson. Cuốn hướng dẫn thực hành này không những cung cấp thông tin thiết thực nhất về deep learning mà còn giúp bạn bắt đầu xây dựng mạng lưới deep learning hiệu quả.
Bạn sẽ được học phần lý thuyết tổng quát của deep learning trước khi được giới thiệu Deeplearning4j (DL4J) nguồn mở của các tác giả, 1 thư viện để phát triển quy trình công việc trong sản xuất. Bằng cách sử dụng các ví dụ thực tế, bạn sẽ tìm hiểu các phương pháp và chiến thuật 1 cách dễ dàng.
Tổng kết về Tensorflow
Trong những năm gần đây, TensorFlow chính là thư viện deep learning nổi tiếng nhất. Người dùng TensorFlow có thể dựng bất kỳ cấu trúc deep learning nào, như CNN, RNN hay artificial neural network – mạng lưới thần kinh nhân tạo.
TensorFlow được dùng nhiều nhất bởi academic, startup và các công ty lớn. Google dùng TensorFlow trong hầu hết tất cả các sản phẩm thường nhật của họ. Bao gồm Gmail, Photo và hệ thống tìm kiếm Google.
Người dùng ưu dùng TensorFlow vì bạn có thể deploy at scale khá là dễ dàng cũng như nó có thể hoạt động trên đám mây hay bất kỳ thiết bị di động nào như iOS hay Android.
Đội ngũ Google Brain đã phát triển TensorFlow để làm khoảng cách giữa các nhà nghiên cứu và lập trình viên sản phẩm lại gần nhau hơn. Năm 2015, họ công khai TensorFlow và nó dần trở nên phổ biến. Ngày nay, TensorFlow đã thành thu viện deep learning với nhiều repo nhất trên GitHub.
Theo topdev.vn
