Tensorflow 简明教程
TensorFlow - Introduction
TensorFlow 是 Google 团队设计的一个软件库或框架,以最简单的形式实现机器学习和深度学习概念。它将优化技术的计算代数相结合,以方便计算许多数学表达式。
TensorFlow is a software library or framework, designed by the Google team to implement machine learning and deep learning concepts in the easiest manner. It combines the computational algebra of optimization techniques for easy calculation of many mathematical expressions.
TensorFlow 的官方网站如下 −
The official website of TensorFlow is mentioned below −

现在让我们考虑 TensorFlow 的以下重要特性 −
Let us now consider the following important features of TensorFlow −
-
It includes a feature of that defines, optimizes and calculates mathematical expressions easily with the help of multi-dimensional arrays called tensors.
-
It includes a programming support of deep neural networks and machine learning techniques.
-
It includes a high scalable feature of computation with various data sets.
-
TensorFlow uses GPU computing, automating management. It also includes a unique feature of optimization of same memory and the data used.
Why is TensorFlow So Popular?
TensorFlow 具有完善的文档,并包含许多机器学习库。它为这些库提供了一些重要的功能和方法。
TensorFlow is well-documented and includes plenty of machine learning libraries. It offers a few important functionalities and methods for the same.
TensorFlow 也称为“Google”产品。它包含多种机器学习和深度学习算法。TensorFlow 可以训练和运行深度神经网络,用于手写数字分类、图像识别、词嵌入和创建各种序列模型。
TensorFlow is also called a “Google” product. It includes a variety of machine learning and deep learning algorithms. TensorFlow can train and run deep neural networks for handwritten digit classification, image recognition, word embedding and creation of various sequence models.
TensorFlow - Installation
要安装 TensorFlow,系统中必须先安装“Python”。通常认为 3.4+ 版本的 Python 最适合于开始 TensorFlow 安装。
To install TensorFlow, it is important to have “Python” installed in your system. Python version 3.4+ is considered the best to start with TensorFlow installation.
请考虑以下步骤在 Windows 操作系统中安装 TensorFlow。
Consider the following steps to install TensorFlow in Windows operating system.
Step 1 − 验证已安装的 Python 版本。
Step 1 − Verify the python version being installed.

Step 2 − 用户可以选择任何一种机制来在系统中安装 TensorFlow。我们推荐使用“pip”和“Anaconda”。Pip 是用于执行和安装 Python 模块的命令。
Step 2 − A user can pick up any mechanism to install TensorFlow in the system. We recommend “pip” and “Anaconda”. Pip is a command used for executing and installing modules in Python.
在安装 TensorFlow 之前,我们需要在系统中安装 Anaconda 框架。
Before we install TensorFlow, we need to install Anaconda framework in our system.

安装成功后,请通过“conda”命令在命令提示符中执行检查。命令的执行如下所示 −
After successful installation, check in command prompt through “conda” command. The execution of command is displayed below −

Step 3 − 执行以下命令以初始化 TensorFlow 安装 −
Step 3 − Execute the following command to initialize the installation of TensorFlow −
conda create --name tensorflow python = 3.5

它将下载 TensorFlow 设置所需的必要程序包。
It downloads the necessary packages needed for TensorFlow setup.
Step 4 − 环境设置成功后,重要的是激活 TensorFlow 模块。
Step 4 − After successful environmental setup, it is important to activate TensorFlow module.
activate tensorflow

Step 5 − 在系统中使用 pip 安装“Tensorflow”。用于安装的命令如下所示 −
Step 5 − Use pip to install “Tensorflow” in the system. The command used for installation is mentioned as below −
pip install tensorflow
并且,
And,
pip install tensorflow-gpu


安装成功后,重要的是了解 TensorFlow 的示例程序执行。
After successful installation, it is important to know the sample program execution of TensorFlow.
以下示例有助于我们了解 TensorFlow 中的基本程序创建“Hello World”。
Following example helps us understand the basic program creation “Hello World” in TensorFlow.

第一版程序实现的代码如下所示 −
The code for first program implementation is mentioned below −
>> activate tensorflow
>> python (activating python shell)
>> import tensorflow as tf
>> hello = tf.constant(‘Hello, Tensorflow!’)
>> sess = tf.Session()
>> print(sess.run(hello))
Understanding Artificial Intelligence
人工智能包括机器和特定计算机系统对人类智能进行模拟的过程。人工智能的示例包括学习、推理和自我纠正。人工智能的应用包括语音识别、专家系统、图像识别和机器视觉。
Artificial Intelligence includes the simulation process of human intelligence by machines and special computer systems. The examples of artificial intelligence include learning, reasoning and self-correction. Applications of AI include speech recognition, expert systems, and image recognition and machine vision.
机器学习是人工智能的一个分支,它处理能够学习任何新数据和数据模式的系统和算法。
Machine learning is the branch of artificial intelligence, which deals with systems and algorithms that can learn any new data and data patterns.
让我们关注以下提到的韦恩图来理解机器学习和深度学习概念。
Let us focus on the Venn diagram mentioned below for understanding machine learning and deep learning concepts.

机器学习包括机器学习的一部分,深度学习是机器学习的一部分。遵循机器学习概念的程序的能力是可以改善其观测数据执行。数据转换的主要动机是改进其知识,以便在未来实现更好的结果,为特定系统提供更接近所需输出的输出。机器学习包括“模式识别”,它包括在数据中识别模式的能力。
Machine learning includes a section of machine learning and deep learning is a part of machine learning. The ability of program which follows machine learning concepts is to improve its performance of observed data. The main motive of data transformation is to improve its knowledge in order to achieve better results in the future, provide output closer to the desired output for that particular system. Machine learning includes “pattern recognition” which includes the ability to recognize the patterns in data.
这些模式应该过训练以所需的方式显示输出。
The patterns should be trained to show the output in desirable manner.
机器学习可以用两种不同的方式进行训练−
Machine learning can be trained in two different ways −
-
Supervised training
-
Unsupervised training
Supervised Learning
监督式学习或监督式训练包括将训练集作为输入提供给系统的过程,其中每个示例都带有所需输出值的标签。通过最大程度减小特定损失函数(它表示输出错误相对于所需的输出系统)来执行此类型的训练。
Supervised learning or supervised training includes a procedure where the training set is given as input to the system wherein, each example is labeled with a desired output value. The training in this type is performed using minimization of a particular loss function, which represents the output error with respect to the desired output system.
在完成训练后,将通过训练集中的不相交示例(也称为验证集)来测量每个模型的准确性。
After completion of training, the accuracy of each model is measured with respect to disjoint examples from training set, also called the validation set.

“监督式学习”的最佳示例是一堆包含附加信息的图片。在这里,用户可以训练模型来识别新图片。
The best example to illustrate “Supervised learning” is with a bunch of photos given with information included in them. Here, the user can train a model to recognize new photos.
Unsupervised Learning
在无监督学习或无监督训练中,包括未通过系统标记他们所属类的训练示例。系统寻找具有共同特征的数据,并根据内部知识特征对其进行更改。这种类型的学习算法基本上用于聚类问题。
In unsupervised learning or unsupervised training, include training examples, which are not labeled by the system to which class they belong. The system looks for the data, which share common characteristics, and changes them based on internal knowledge features.This type of learning algorithms are basically used in clustering problems.
“无监督学习”的最佳示例是一堆没有包含信息的图片,用户使用分类和聚类对模型进行训练。这种类型的训练算法是基于假设的,因为没有提供信息。
The best example to illustrate “Unsupervised learning” is with a bunch of photos with no information included and user trains model with classification and clustering. This type of training algorithm works with assumptions as no information is given.

TensorFlow - Mathematical Foundations
在 TensorFlow 中创建基本应用程序之前,了解 TensorFlow 所需的数学概念非常重要。数学被认为是任何机器学习算法的核心。借助数学的核心概念,可以定义特定机器学习算法的解决方案。
It is important to understand mathematical concepts needed for TensorFlow before creating the basic application in TensorFlow. Mathematics is considered as the heart of any machine learning algorithm. It is with the help of core concepts of Mathematics, a solution for specific machine learning algorithm is defined.
Vector
连续或离散的一组数字被定义为向量。机器学习算法处理固定长度的向量以生成更好的输出。
An array of numbers, which is either continuous or discrete, is defined as a vector. Machine learning algorithms deal with fixed length vectors for better output generation.
机器学习算法处理多维数据,因此向量起着至关重要的作用。
Machine learning algorithms deal with multidimensional data so vectors play a crucial role.

向量模型的图片表示如下所示 −
The pictorial representation of vector model is as shown below −

Scalar
标量可以定义为一维向量。标量是仅包含大小且没有方向的标量。对于标量,我们只关心大小。
Scalar can be defined as one-dimensional vector. Scalars are those, which include only magnitude and no direction. With scalars, we are only concerned with the magnitude.
标量的示例包括儿童的体重和身高参数。
Examples of scalar include weight and height parameters of children.
Matrix
矩阵可以定义为多维数组,这些数组按行和列的格式排列。矩阵的大小由行长度和列长度定义。下图显示了任何指定矩阵的表示。
Matrix can be defined as multi-dimensional arrays, which are arranged in the format of rows and columns. The size of matrix is defined by row length and column length. Following figure shows the representation of any specified matrix.

考虑上面提到的具有“m”行和“n”列的矩阵,矩阵表示将指定为“m*n 矩阵”,该矩阵也定义了矩阵的长度。
Consider the matrix with “m” rows and “n” columns as mentioned above, the matrix representation will be specified as “m*n matrix” which defined the length of matrix as well.
Mathematical Computations
在本部分,我们将了解 TensorFlow 中的不同数学计算。
In this section, we will learn about the different Mathematical Computations in TensorFlow.
Addition of matrices
如果矩阵具有相同的维数,则可以对两个或更多个矩阵进行加法。加法意味着按给定位置对每个元素进行加法。
Addition of two or more matrices is possible if the matrices are of the same dimension. The addition implies addition of each element as per the given position.
考虑以下示例以了解矩阵加法如何工作 −
Consider the following example to understand how addition of matrices works −
示例:A=\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \\7 & 8 \end{bmatrix}\:then\:A+B=\begin{bmatrix}1+5 & 2+6 \\3+7 & 4+8 \end{bmatrix}=\begin{bmatrix}6 & 8 \\10 & 12 \end{bmatrix}
Example:A=\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \\7 & 8 \end{bmatrix}\:then\:A+B=\begin{bmatrix}1+5 & 2+6 \\3+7 & 4+8 \end{bmatrix}=\begin{bmatrix}6 & 8 \\10 & 12 \end{bmatrix}
Subtraction of matrices
矩阵的减法操作方式与两个矩阵的加法类似。只要维数相等,用户就可以减去两个矩阵。
The subtraction of matrices operates in similar fashion like the addition of two matrices. The user can subtract two matrices provided the dimensions are equal.
示例:A-\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}B-\begin{bmatrix}5 & 6 \\7 & 8 \end{bmatrix}\:then\:A-B-\begin{bmatrix}1-5 & 2-6 \\3-7 & 4-8 \end{bmatrix}-\begin{bmatrix}-4 & -4 \\-4 & -4 \end{bmatrix}
Example:A-\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}B-\begin{bmatrix}5 & 6 \\7 & 8 \end{bmatrix}\:then\:A-B-\begin{bmatrix}1-5 & 2-6 \\3-7 & 4-8 \end{bmatrix}-\begin{bmatrix}-4 & -4 \\-4 & -4 \end{bmatrix}
Multiplication of matrices
对于两个矩阵 A m*n 和 B p*q 可以相乘, n 应等于 p 。结果矩阵为 −
For two matrices A m*n and B p*q to be multipliable, n should be equal to p. The resulting matrix is −
C m*q
A=\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \\7 & 8 \end{bmatrix}
c_{11}=\begin{bmatrix}1 & 2 \end{bmatrix}\begin{bmatrix}5 \\7 \end{bmatrix}=1\times5+2\times7=19\:c_{12}=\begin{bmatrix}1 & 2 \end{bmatrix}\begin{bmatrix}6 \\8 \end{bmatrix}=1\times6+2\times8=22
c_{21}=\begin{bmatrix}3 & 4 \end{bmatrix}\begin{bmatrix}5 \\7 \end{bmatrix}=3\times5+4\times7=43\:c_{22}=\begin{bmatrix}3 & 4 \end{bmatrix}\begin{bmatrix}6 \\8 \end{bmatrix}=3\times6+4\times8=50
C=\begin{bmatrix}c_{11} & c_{12} \\c_{21} & c_{22} \end{bmatrix}=\begin{bmatrix}19 & 22 \\43 & 50 \end{bmatrix}
Transpose of matrix
矩阵 A 的转置,m*n 通常表示为 AT(转置)n*m;可通过将列向量转置为行向量获得。
The transpose of a matrix A, m*n is generally represented by AT (transpose) n*m and is obtained by transposing the column vectors as row vectors.
示例:A=\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}:然后 A^{T}\begin{bmatrix}1 & 3 \\2 & 4 \end{bmatrix}
Example:A=\begin{bmatrix}1 & 2 \\3 & 4 \end{bmatrix}\:then\:A^{T}\begin{bmatrix}1 & 3 \\2 & 4 \end{bmatrix}
Dot product of vectors
任何维度为 n 的向量可表示为矩阵 v = R^n*1。
Any vector of dimension n can be represented as a matrix v = R^n*1.
v_{1}=\begin{bmatrix}v_{11} \\v_{12} \\\cdot\\\cdot\\\cdot\\v_{1n}\end{bmatrix}v_{2}=\begin{bmatrix}v_{21} \\v_{22} \\\cdot\\\cdot\\\cdot\\v_{2n}\end{bmatrix}
两个向量的点积是对应分量的乘积之和 - 相同维度上的分量,其表示形式为
The dot product of two vectors is the sum of the product of corresponding components − Components along the same dimension and can be expressed as
v_{1}\cdot v_{2}=v_1 Tv_{2}=v_2 Tv_{1}=v_{11}v_{21}v_{12}v_{22}\cdot\cdot+v_{1n}v_{2n}=\displaystyle\sum\limits_{k=1}^n v_{1k}v_{2k}
v_{1}\cdot v_{2}=v_1Tv_{2}=v_2Tv_{1}=v_{11}v_{21}v_{12}v_{22}\cdot\cdot+v_{1n}v_{2n}=\displaystyle\sum\limits_{k=1}^n v_{1k}v_{2k}
下面提到了向量的点积示例 -
The example of dot product of vectors is mentioned below −
示例:v_{1}=\begin{bmatrix}1 \\2 \\3\end{bmatrix}v_{2}=\begin{bmatrix}3 \\5 \\-1\end{bmatrix}v_{1}\cdot v_{2}=v_1^Tv_{2}=1\times3+2\times5-3\times1=10
Example:v_{1}=\begin{bmatrix}1 \\2 \\3\end{bmatrix}v_{2}=\begin{bmatrix}3 \\5 \\-1\end{bmatrix}v_{1}\cdot v_{2}=v_1^Tv_{2}=1\times3+2\times5-3\times1=10
Machine Learning and Deep Learning
人工智能是近年来最热门的趋势之一。机器学习和深度学习构成人工智能。下面显示的维恩图解释了机器学习和深度学习之间的关系 −
Artificial Intelligence is one of the most popular trends of recent times. Machine learning and deep learning constitute artificial intelligence. The Venn diagram shown below explains the relationship of machine learning and deep learning −

Machine Learning
机器学习是让计算机按照设计和编程的算法执行操作的科学艺术。许多研究人员认为,机器学习是实现达到人类水平的 AI 的最佳途径。机器学习包括以下类型的模式
Machine learning is the art of science of getting computers to act as per the algorithms designed and programmed. Many researchers think machine learning is the best way to make progress towards human-level AI. Machine learning includes the following types of patterns
-
Supervised learning pattern
-
Unsupervised learning pattern
Deep Learning
深度学习是机器学习的一个子领域,其中涉及的算法受到称为人工神经网络的大脑结构和功能的启发。
Deep learning is a subfield of machine learning where concerned algorithms are inspired by the structure and function of the brain called artificial neural networks.
当今深度学习的所有价值都是通过监督式学习或从标记数据和算法中学习而获得的。
All the value today of deep learning is through supervised learning or learning from labelled data and algorithms.
深度学习中的每个算法都会经历相同的过程。它包括输入的非线性变换层次结构,可用于生成统计模型作为输出。
Each algorithm in deep learning goes through the same process. It includes a hierarchy of nonlinear transformation of input that can be used to generate a statistical model as output.
考虑定义机器学习过程的以下步骤
Consider the following steps that define the Machine Learning process
-
Identifies relevant data sets and prepares them for analysis.
-
Chooses the type of algorithm to use
-
Builds an analytical model based on the algorithm used.
-
Trains the model on test data sets, revising it as needed.
-
Runs the model to generate test scores.
Difference between Machine Learning and Deep learning
在本节中,我们将了解机器学习和深度学习之间的差异。
In this section, we will learn about the difference between Machine Learning and Deep Learning.
Amount of data
机器学习处理大量数据。它对于处理少量数据也有用。另一方面,如果数据量快速增长,深度学习将有效。下图显示了机器学习和深度学习与数据量之间如何运作 −
Machine learning works with large amounts of data. It is useful for small amounts of data too. Deep learning on the other hand works efficiently if the amount of data increases rapidly. The following diagram shows the working of machine learning and deep learning with the amount of data −

Hardware Dependencies
与传统机器学习算法不同,深度学习算法被设计为高度依赖于高端机器。深度学习算法执行许多矩阵乘法运算,需要大量的硬件支持。
Deep learning algorithms are designed to heavily depend on high-end machines unlike the traditional machine learning algorithms. Deep learning algorithms perform a number of matrix multiplication operations, which require a large amount of hardware support.
Feature Engineering
特征工程是将领域知识放入指定特征中以降低数据复杂性并使模式对学习算法可见的过程。
Feature engineering is the process of putting domain knowledge into specified features to reduce the complexity of data and make patterns that are visible to learning algorithms it works.
示例 − 传统机器学习模式专注于像素和其他用于特征工程过程的属性。深度学习算法专注于数据中的高级特征。它减少了为每个新问题开发新特征提取器的任务。
Example − Traditional machine learning patterns focus on pixels and other attributes needed for feature engineering process. Deep learning algorithms focus on high-level features from data. It reduces the task of developing new feature extractor of every new problem.
Problem Solving Approach
传统机器学习算法遵循标准程序来解决问题。它将问题分解为部分,解决其中每个部分并将它们组合起来以获得所需的结果。深度学习专注于端到端解决问题,而不是将问题分解为各个部分。
The traditional machine learning algorithms follow a standard procedure to solve the problem. It breaks the problem into parts, solve each one of them and combine them to get the required result. Deep learning focusses in solving the problem from end to end instead of breaking them into divisions.
Execution Time
执行时间是训练算法所需的时间量。深度学习需要很多时间来训练,因为它包含许多参数,耗时比平时长。相比之下,机器学习算法所需的执行时间较少。
Execution time is the amount of time required to train an algorithm. Deep learning requires a lot of time to train as it includes a lot of parameters which takes a longer time than usual. Machine learning algorithm comparatively requires less execution time.
Applications of Machine Learning and Deep Learning
在本节中,我们将了解机器学习和深度学习的不同应用。
In this section, we will learn about the different applications of Machine Learning and Deep Learning.
-
Computer vision which is used for facial recognition and attendance mark through fingerprints or vehicle identification through number plate.
-
Information Retrieval from search engines like text search for image search.
-
Automated email marketing with specified target identification.
-
Medical diagnosis of cancer tumors or anomaly identification of any chronic disease.
-
Natural language processing for applications like photo tagging. The best example to explain this scenario is used in Facebook.
-
Online Advertising.
Future Trends
-
With the increasing trend of using data science and machine learning in the industry, it will become important for each organization to inculcate machine learning in their businesses.
-
Deep learning is gaining more importance than machine learning. Deep learning is proving to be one of the best techniques in state-of-art performance.
-
Machine learning and deep learning will prove beneficial in research and academics field.
Conclusion
本文概述了机器学习和深度学习,并提供了图示,展示了差异,同时重点介绍了未来趋势。许多 AI 应用程序主要利用机器学习算法来实现自助服务、提高代理生产力,并提高工作流的可靠性。机器学习和深度学习算法对许多企业和行业领导者来说是一个激动人心的前景。
In this article, we had an overview of machine learning and deep learning with illustrations and differences also focusing on future trends. Many of AI applications utilize machine learning algorithms primarily to drive self-service, increase agent productivity and workflows more reliable. Machine learning and deep learning algorithms include an exciting prospect for many businesses and industry leaders.
TensorFlow - Basics
在本章中,我们将学习 TensorFlow 的基础知识。我们将首先了解张量的基础数据结构。
In this chapter, we will learn about the basics of TensorFlow. We will begin by understanding the data structure of tensor.
Tensor Data Structure
在 TensorFlow 语言中,张量用作基础数据结构。张量表示任意流图(称为数据流图)中的连接边缘。张量被定义为数组或列表的多维形式。
Tensors are used as the basic data structures in TensorFlow language. Tensors represent the connecting edges in any flow diagram called the Data Flow Graph. Tensors are defined as multidimensional array or list.
张量由以下三个参数标识:
Tensors are identified by the following three parameters −
Various Dimensions of TensorFlow
TensorFlow 包含多个维度。这些维度简述如下:
TensorFlow includes various dimensions. The dimensions are described in brief below −
One dimensional Tensor
一维张量是包含同一数据类型的一组值的常规数组结构。
One dimensional tensor is a normal array structure which includes one set of values of the same data type.
Declaration
Declaration
>>> import numpy as np
>>> tensor_1d = np.array([1.3, 1, 4.0, 23.99])
>>> print tensor_1d
带有输出的实施在以下屏幕截图中显示:
The implementation with the output is shown in the screenshot below −

元素的索引与 Python 列表相同。第一个元素从索引 0 开始;要通过索引打印值,您只需要提及索引号。
The indexing of elements is same as Python lists. The first element starts with index of 0; to print the values through index, all you need to do is mention the index number.
>>> print tensor_1d[0]
1.3
>>> print tensor_1d[2]
4.0

Two dimensional Tensors
数组序列用于创建“二维张量”。
Sequence of arrays are used for creating “two dimensional tensors”.
二维张量的创建如下所述 −
The creation of two-dimensional tensors is described below −

以下是创建二维数组的完整语法 −
Following is the complete syntax for creating two dimensional arrays −
>>> import numpy as np
>>> tensor_2d = np.array([(1,2,3,4),(4,5,6,7),(8,9,10,11),(12,13,14,15)])
>>> print(tensor_2d)
[[ 1 2 3 4]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
>>>
可以用行号和指定为索引号的列号来追踪二维张量的特定元素。
The specific elements of two dimensional tensors can be tracked with the help of row number and column number specified as index numbers.
>>> tensor_2d[3][2]
14

Tensor Handling and Manipulations
在本节中,我们将学习张量处理和操作。
In this section, we will learn about Tensor Handling and Manipulations.
首先,我们考虑以下代码 −
To begin with, let us consider the following code −
import tensorflow as tf
import numpy as np
matrix1 = np.array([(2,2,2),(2,2,2),(2,2,2)],dtype = 'int32')
matrix2 = np.array([(1,1,1),(1,1,1),(1,1,1)],dtype = 'int32')
print (matrix1)
print (matrix2)
matrix1 = tf.constant(matrix1)
matrix2 = tf.constant(matrix2)
matrix_product = tf.matmul(matrix1, matrix2)
matrix_sum = tf.add(matrix1,matrix2)
matrix_3 = np.array([(2,7,2),(1,4,2),(9,0,2)],dtype = 'float32')
print (matrix_3)
matrix_det = tf.matrix_determinant(matrix_3)
with tf.Session() as sess:
result1 = sess.run(matrix_product)
result2 = sess.run(matrix_sum)
result3 = sess.run(matrix_det)
print (result1)
print (result2)
print (result3)
Output
上述代码将生成以下输出 −
The above code will generate the following output −

Explanation
我们在上述源代码中生成了多维数组。现在,重要的是要理解我们创建了管理张量的图形和会话,并生成了适当的输出。借助图形,我们有指定张量之间数学计算的输出。
We have created multidimensional arrays in the above source code. Now, it is important to understand that we created graph and sessions, which manage the Tensors and generate the appropriate output. With the help of graph, we have the output specifying the mathematical calculations between Tensors.
TensorFlow - Convolutional Neural Networks
在了解机器学习概念后,我们现在可以将重点转移到深度学习概念中。深度学习是机器学习的一部分内容,被认为是研究人员在近几十年中迈出的关键一步。深度学习实施的示例包括图像识别和语音识别的应用。
After understanding machine-learning concepts, we can now shift our focus to deep learning concepts. Deep learning is a division of machine learning and is considered as a crucial step taken by researchers in recent decades. The examples of deep learning implementation include applications like image recognition and speech recognition.
以下是两种重要的深度神经网络类型 -
Following are the two important types of deep neural networks −
-
Convolutional Neural Networks
-
Recurrent Neural Networks
在本章中,我们将重点关注 CNN,也就是卷积神经网络。
In this chapter, we will focus on the CNN, Convolutional Neural Networks.
Convolutional Neural Networks
卷积神经网络设计用于通过多个数组层处理数据。此类神经网络用于图像识别或面部识别等应用。CNN 和任何其他普通神经网络的主要区别在于,CNN 将输入作为二维数组,并且直接在图像上进行操作,而不是专注于其他神经网络关注的特征提取。
Convolutional Neural networks are designed to process data through multiple layers of arrays. This type of neural networks is used in applications like image recognition or face recognition. The primary difference between CNN and any other ordinary neural network is that CNN takes input as a two-dimensional array and operates directly on the images rather than focusing on feature extraction which other neural networks focus on.
CNN 的优势方法包括解决识别问题。诸如 Google 和 Facebook 等顶级公司已投资于识别项目的研发中,以更快的速度完成活动。
The dominant approach of CNN includes solutions for problems of recognition. Top companies like Google and Facebook have invested in research and development towards recognition projects to get activities done with greater speed.
卷积神经网络采用了三个基本思想 -
A convolutional neural network uses three basic ideas −
-
Local respective fields
-
Convolution
-
Pooling
让我们详细理解这些想法。
Let us understand these ideas in detail.
CNN 利用输入数据内存在的空间关联。神经网络的每个并发层都会连接一些输入神经元。这个特定区域被称为局部感受视野。局部感受视野专注于隐藏神经元。隐藏神经元在提到的视野内处理输入数据,而不了解超出特定边界的变化。
CNN utilizes spatial correlations that exist within the input data. Each concurrent layer of a neural network connects some input neurons. This specific region is called local receptive field. Local receptive field focusses on the hidden neurons. The hidden neurons process the input data inside the mentioned field not realizing the changes outside the specific boundary.
以下是有关生成局部感受视野的图表表示 −
Following is a diagram representation of generating local respective fields −

如果观察上面的表示,每个连接都会学习一个隐藏神经元的权重,该权重与从一层到另一层的移动相关。在这里,单个神经元会不时地进行移动。这个过程称为“卷积”。
If we observe the above representation, each connection learns a weight of the hidden neuron with an associated connection with movement from one layer to another. Here, individual neurons perform a shift from time to time. This process is called “convolution”.
从输入层到隐含特征图的连接映射被定义为“共享权重”,而包含的偏差被称为“共享偏差”。
The mapping of connections from the input layer to the hidden feature map is defined as “shared weights” and bias included is called “shared bias”.
CNN 或卷积神经网络使用池化层,这些层是紧接 CNN 声明之后放置的层。它将用户输入作为来自卷积网络的特征图,并准备一个浓缩特征图。池化层有助于创建包含前一层神经元的层。
CNN or convolutional neural networks use pooling layers, which are the layers, positioned immediately after CNN declaration. It takes the input from the user as a feature map that comes out of convolutional networks and prepares a condensed feature map. Pooling layers helps in creating layers with neurons of previous layers.
TensorFlow Implementation of CNN
在本节中,我们将了解 TensorFlow 的 CNN 实现。要求整个网络执行和适当尺寸的步骤如下所示:
In this section, we will learn about the TensorFlow implementation of CNN. The steps,which require the execution and proper dimension of the entire network, are as shown below −
Step 1 − 包括 TensorFlow 和数据集模块的必要模块,这些模块需要计算 CNN 模型。
Step 1 − Include the necessary modules for TensorFlow and the data set modules, which are needed to compute the CNN model.
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
Step 2 − 声明一个名为 run_cnn() 的函数,其中包含各种参数和优化变量以及数据占位符的声明。这些优化变量将声明训练模式。
Step 2 − Declare a function called run_cnn(), which includes various parameters and optimization variables with declaration of data placeholders. These optimization variables will declare the training pattern.
def run_cnn():
mnist = input_data.read_data_sets("MNIST_data/", one_hot = True)
learning_rate = 0.0001
epochs = 10
batch_size = 50
Step 3 − 在此步骤中,我们将声明具有输入参数的训练数据占位符 - 28 x 28 像素 = 784。这是来自 mnist.train.nextbatch() 的扁平化图像数据。
Step 3 − In this step, we will declare the training data placeholders with input parameters - for 28 x 28 pixels = 784. This is the flattened image data that is drawn from mnist.train.nextbatch().
我们可以根据需要对张量进行整形。第一个值 (-1) 告诉函数根据传递给它的数据量动态整形该维度。中间两个维度设置为图像大小(即 28 x 28)。
We can reshape the tensor according to our requirements. The first value (-1) tells function to dynamically shape that dimension based on the amount of data passed to it. The two middle dimensions are set to the image size (i.e. 28 x 28).
x = tf.placeholder(tf.float32, [None, 784])
x_shaped = tf.reshape(x, [-1, 28, 28, 1])
y = tf.placeholder(tf.float32, [None, 10])
Step 4 − 现在,创建一些卷积层非常重要 −
Step 4 − Now it is important to create some convolutional layers −
layer1 = create_new_conv_layer(x_shaped, 1, 32, [5, 5], [2, 2], name = 'layer1')
layer2 = create_new_conv_layer(layer1, 32, 64, [5, 5], [2, 2], name = 'layer2')
Step 5 − 在具有 28 x 28 维度的两层步长 2 池化后,让我们压平输出,使其准备好进行完全连接的输出阶段,使其变为 14 x 14 或至少 7 x 7 x,y 坐标,但具有 64 个输出通道。为了使用“密集”层创建完全连接,新形状需要为 [-1, 7 x 7 x 64]。我们可以为此层设置一些权重和偏差值,然后使用 ReLU 激活。
Step 5 − Let us flatten the output ready for the fully connected output stage - after two layers of stride 2 pooling with the dimensions of 28 x 28, to dimension of 14 x 14 or minimum 7 x 7 x,y co-ordinates, but with 64 output channels. To create the fully connected with "dense" layer, the new shape needs to be [-1, 7 x 7 x 64]. We can set up some weights and bias values for this layer, then activate with ReLU.
flattened = tf.reshape(layer2, [-1, 7 * 7 * 64])
wd1 = tf.Variable(tf.truncated_normal([7 * 7 * 64, 1000], stddev = 0.03), name = 'wd1')
bd1 = tf.Variable(tf.truncated_normal([1000], stddev = 0.01), name = 'bd1')
dense_layer1 = tf.matmul(flattened, wd1) + bd1
dense_layer1 = tf.nn.relu(dense_layer1)
Step 6 − 具有特定 softmax 激活的另一层,带有所需的优化器定义了准确性评估,它会设置初始化运算符。
Step 6 − Another layer with specific softmax activations with the required optimizer defines the accuracy assessment, which makes the setup of initialization operator.
wd2 = tf.Variable(tf.truncated_normal([1000, 10], stddev = 0.03), name = 'wd2')
bd2 = tf.Variable(tf.truncated_normal([10], stddev = 0.01), name = 'bd2')
dense_layer2 = tf.matmul(dense_layer1, wd2) + bd2
y_ = tf.nn.softmax(dense_layer2)
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(logits = dense_layer2, labels = y))
optimiser = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
init_op = tf.global_variables_initializer()
Step 7 − 我们应该设置记录变量。这会添加一个摘要来存储数据的准确性。
Step 7 − We should set up recording variables. This adds up a summary to store the accuracy of data.
tf.summary.scalar('accuracy', accuracy)
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter('E:\TensorFlowProject')
with tf.Session() as sess:
sess.run(init_op)
total_batch = int(len(mnist.train.labels) / batch_size)
for epoch in range(epochs):
avg_cost = 0
for i in range(total_batch):
batch_x, batch_y = mnist.train.next_batch(batch_size = batch_size)
_, c = sess.run([optimiser, cross_entropy], feed_dict = {
x:batch_x, y: batch_y})
avg_cost += c / total_batch
test_acc = sess.run(accuracy, feed_dict = {x: mnist.test.images, y:
mnist.test.labels})
summary = sess.run(merged, feed_dict = {x: mnist.test.images, y:
mnist.test.labels})
writer.add_summary(summary, epoch)
print("\nTraining complete!")
writer.add_graph(sess.graph)
print(sess.run(accuracy, feed_dict = {x: mnist.test.images, y:
mnist.test.labels}))
def create_new_conv_layer(
input_data, num_input_channels, num_filters,filter_shape, pool_shape, name):
conv_filt_shape = [
filter_shape[0], filter_shape[1], num_input_channels, num_filters]
weights = tf.Variable(
tf.truncated_normal(conv_filt_shape, stddev = 0.03), name = name+'_W')
bias = tf.Variable(tf.truncated_normal([num_filters]), name = name+'_b')
#Out layer defines the output
out_layer =
tf.nn.conv2d(input_data, weights, [1, 1, 1, 1], padding = 'SAME')
out_layer += bias
out_layer = tf.nn.relu(out_layer)
ksize = [1, pool_shape[0], pool_shape[1], 1]
strides = [1, 2, 2, 1]
out_layer = tf.nn.max_pool(
out_layer, ksize = ksize, strides = strides, padding = 'SAME')
return out_layer
if __name__ == "__main__":
run_cnn()
以下是以上代码生成的输出 −
Following is the output generated by the above code −
See @{tf.nn.softmax_cross_entropy_with_logits_v2}.
2018-09-19 17:22:58.802268: I
T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2
2018-09-19 17:25:41.522845: W
T:\src\github\tensorflow\tensorflow\core\framework\allocator.cc:101] Allocation
of 1003520000 exceeds 10% of system memory.
2018-09-19 17:25:44.630941: W
T:\src\github\tensorflow\tensorflow\core\framework\allocator.cc:101] Allocation
of 501760000 exceeds 10% of system memory.
Epoch: 1 cost = 0.676 test accuracy: 0.940
2018-09-19 17:26:51.987554: W
T:\src\github\tensorflow\tensorflow\core\framework\allocator.cc:101] Allocation
of 1003520000 exceeds 10% of system memory.
TensorFlow - Recurrent Neural Networks
递归神经网络是一种面向深度学习的算法,它遵循顺序方法。在神经网络中,我们总是假设每个输入和输出独立于所有其他层。这些类型的神经网络被称为递归网络,因为它们以顺序方式执行数学计算。
Recurrent neural networks is a type of deep learning-oriented algorithm, which follows a sequential approach. In neural networks, we always assume that each input and output is independent of all other layers. These type of neural networks are called recurrent because they perform mathematical computations in sequential manner.
考虑以下训练递归神经网络的步骤 −
Consider the following steps to train a recurrent neural network −
Step 1 − 从数据集中输入一个特定示例。
Step 1 − Input a specific example from dataset.
Step 2 − 网络将采用一个示例,并使用随机初始化的变量计算一些计算。
Step 2 − Network will take an example and compute some calculations using randomly initialized variables.
Step 3 − 然后计算预期的结果。
Step 3 − A predicted result is then computed.
Step 4 − 用产生的实际结果与期望值进行比较将产生一个误差。
Step 4 − The comparison of actual result generated with the expected value will produce an error.
Step 5 − 为了追踪误差,它通过变量也调整的相同路径传播。
Step 5 − To trace the error, it is propagated through same path where the variables are also adjusted.
Step 6 − 从 1 到 5 的步骤重复,直到我们确信宣告的变量以获得输出被正确定义。
Step 6 − The steps from 1 to 5 are repeated until we are confident that the variables declared to get the output are defined properly.
Step 7 − 通过应用这些变量来获得新的看不见的输入,做出一个系统的预测。
Step 7 − A systematic prediction is made by applying these variables to get new unseen input.
递归神经网络的示意图方法如下所述 −
The schematic approach of representing recurrent neural networks is described below −

Recurrent Neural Network Implementation with TensorFlow
在本节中,我们将学习如何用 TensorFlow 实现递归神经网络。
In this section, we will learn how to implement recurrent neural network with TensorFlow.
Step 1 − TensorFlow 包含用于实现递归神经网络模块的各种库。
Step 1 − TensorFlow includes various libraries for specific implementation of the recurrent neural network module.
#Import necessary modules
from __future__ import print_function
import tensorflow as tf
from tensorflow.contrib import rnn
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot = True)
如上所述,这些库有助于定义输入数据,这形成了递归神经网络实现的主要部分。
As mentioned above, the libraries help in defining the input data, which forms the primary part of recurrent neural network implementation.
Step 2 − 我们的主要动机是使用循环神经网络对图像进行分类,其中我们把每行图像看成像素序列。MNIST 的图像形状具体定义为 28*28 px。现在我们将处理前面提到的每个样本的 28 个 28 步骤的序列。我们将定义输入参数以便完成序列模式。
Step 2 − Our primary motive is to classify the images using a recurrent neural network, where we consider every image row as a sequence of pixels. MNIST image shape is specifically defined as 28*28 px. Now we will handle 28 sequences of 28 steps for each sample that is mentioned. We will define the input parameters to get the sequential pattern done.
n_input = 28 # MNIST data input with img shape 28*28
n_steps = 28
n_hidden = 128
n_classes = 10
# tf Graph input
x = tf.placeholder("float", [None, n_steps, n_input])
y = tf.placeholder("float", [None, n_classes]
weights = {
'out': tf.Variable(tf.random_normal([n_hidden, n_classes]))
}
biases = {
'out': tf.Variable(tf.random_normal([n_classes]))
}
Step 3 − 使用 RNN 中定义的函数计算结果以获得最佳结果。此处,将每个数据形状与当前输入形状进行比较,并对结果进行计算以保持准确率。
Step 3 − Compute the results using a defined function in RNN to get the best results. Here, each data shape is compared with current input shape and the results are computed to maintain the accuracy rate.
def RNN(x, weights, biases):
x = tf.unstack(x, n_steps, 1)
# Define a lstm cell with tensorflow
lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Get lstm cell output
outputs, states = rnn.static_rnn(lstm_cell, x, dtype = tf.float32)
# Linear activation, using rnn inner loop last output
return tf.matmul(outputs[-1], weights['out']) + biases['out']
pred = RNN(x, weights, biases)
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = pred, labels = y))
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)
# Evaluate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
# Initializing the variables
init = tf.global_variables_initializer()
Step 4 − 在此步骤中,我们将启动图表以获取计算结果。这也将帮助计算出测试结果的准确率。
Step 4 − In this step, we will launch the graph to get the computational results. This also helps in calculating the accuracy for test results.
with tf.Session() as sess:
sess.run(init)
step = 1
# Keep training until reach max iterations
while step * batch_size < training_iters:
batch_x, batch_y = mnist.train.next_batch(batch_size)
batch_x = batch_x.reshape((batch_size, n_steps, n_input))
sess.run(optimizer, feed_dict={x: batch_x, y: batch_y})
if step % display_step == 0:
# Calculate batch accuracy
acc = sess.run(accuracy, feed_dict={x: batch_x, y: batch_y})
# Calculate batch loss
loss = sess.run(cost, feed_dict={x: batch_x, y: batch_y})
print("Iter " + str(step*batch_size) + ", Minibatch Loss= " + \
"{:.6f}".format(loss) + ", Training Accuracy= " + \
"{:.5f}".format(acc))
step += 1
print("Optimization Finished!")
test_len = 128
test_data = mnist.test.images[:test_len].reshape((-1, n_steps, n_input))
test_label = mnist.test.labels[:test_len]
print("Testing Accuracy:", \
sess.run(accuracy, feed_dict={x: test_data, y: test_label}))
下面的屏幕截图给出了输出结果 −
The screenshots below show the output generated −


TensorFlow - TensorBoard Visualization
TensorFlow 包含一个名为 TensorBoard 的可视化工具。它用于分析数据流程图,还用于了解机器学习模型。TensorBoard 的重要功能包括从垂直方向上查看关于参数和任何图表的详细信息的不同类型的统计信息。
TensorFlow includes a visualization tool, which is called the TensorBoard. It is used for analyzing Data Flow Graph and also used to understand machine-learning models. The important feature of TensorBoard includes a view of different types of statistics about the parameters and details of any graph in vertical alignment.
深度神经网络包括多达 36000 个节点。TensorBoard 帮助以高级块折叠这些节点并突出显示相同结构。这将允许对图进行更好的分析,重点关注计算图的主要部分。TensorBoard 可视化被认为是极具交互性的,用户可以在其中平移、缩放和展开节点以显示详细信息。
Deep neural network includes up to 36,000 nodes. TensorBoard helps in collapsing these nodes in high-level blocks and highlighting the identical structures. This allows better analysis of graph focusing on the primary sections of the computation graph. The TensorBoard visualization is said to be very interactive where a user can pan, zoom and expand the nodes to display the details.
以下示意图表示展示了 TensorBoard 可视化的完整工作原理 −
The following schematic diagram representation shows the complete working of TensorBoard visualization −

该算法将节点折叠成高级块并突出显示特定组,其中包含相同结构,从而分离出高阶节点。这样创建的 TensorBoard 是有用的,并且被认为与调整机器学习模型同样重要。此可视化工具旨在用于包含汇总信息和需要显示的详细信息的配置日志文件。
The algorithms collapse nodes into high-level blocks and highlight the specific groups with identical structures, which separate high-degree nodes. The TensorBoard thus created is useful and is treated equally important for tuning a machine learning model. This visualization tool is designed for the configuration log file with summary information and details that need to be displayed.
让我们借助以下代码重点关注 TensorBoard 可视化演示示例 −
Let us focus on the demo example of TensorBoard visualization with the help of the following code −
import tensorflow as tf
# Constants creation for TensorBoard visualization
a = tf.constant(10,name = "a")
b = tf.constant(90,name = "b")
y = tf.Variable(a+b*2,name = 'y')
model = tf.initialize_all_variables() #Creation of model
with tf.Session() as session:
merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/tensorflowlogs",session.graph)
session.run(model)
print(session.run(y))
下表显示了用于节点表示的 TensorBoard 可视化的各种符号 −
The following table shows the various symbols of TensorBoard visualization used for the node representation −

TensorFlow - Word Embedding
词嵌入是将离散对象(如单词)映射到向量和实数的概念。这对机器学习的输入至关重要。此概念包括将离散输入对象有效转换为有用向量中的标准函数。
Word embedding is the concept of mapping from discrete objects such as words to vectors and real numbers. It is important for input for machine learning. The concept includes standard functions, which effectively transform discrete input objects to useful vectors.
单词嵌入输入的样本说明如下所示 −
The sample illustration of input of word embedding is as shown below −
blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)
blues: (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)
orange: (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)
oranges: (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)
Word2vec
Word2vec 是用于无监督单词嵌入技术的最常用方法。它以给定的输入单词利用跳字序列预测单词上下文的这样一种方式对模型进行训练。
Word2vec is the most common approach used for unsupervised word embedding technique. It trains the model in such a way that a given input word predicts the word’s context by using skip-grams.
TensorFlow 通过使用多线程概念和高级抽象,以逐渐增加的精细化和优化级别实现了这种模型的多种方式。
TensorFlow enables many ways to implement this kind of model with increasing levels of sophistication and optimization and using multithreading concepts and higher-level abstractions.
import os
import math
import numpy as np
import tensorflow as tf
from tensorflow.contrib.tensorboard.plugins import projector
batch_size = 64
embedding_dimension = 5
negative_samples = 8
LOG_DIR = "logs/word2vec_intro"
digit_to_word_map = {
1: "One",
2: "Two",
3: "Three",
4: "Four",
5: "Five",
6: "Six",
7: "Seven",
8: "Eight",
9: "Nine"}
sentences = []
# Create two kinds of sentences - sequences of odd and even digits.
for i in range(10000):
rand_odd_ints = np.random.choice(range(1, 10, 2), 3)
sentences.append(" ".join([digit_to_word_map[r] for r in rand_odd_ints]))
rand_even_ints = np.random.choice(range(2, 10, 2), 3)
sentences.append(" ".join([digit_to_word_map[r] for r in rand_even_ints]))
# Map words to indices
word2index_map = {}
index = 0
for sent in sentences:
for word in sent.lower().split():
if word not in word2index_map:
word2index_map[word] = index
index += 1
index2word_map = {index: word for word, index in word2index_map.items()}
vocabulary_size = len(index2word_map)
# Generate skip-gram pairs
skip_gram_pairs = []
for sent in sentences:
tokenized_sent = sent.lower().split()
for i in range(1, len(tokenized_sent)-1):
word_context_pair = [[word2index_map[tokenized_sent[i-1]],
word2index_map[tokenized_sent[i+1]]], word2index_map[tokenized_sent[i]]]
skip_gram_pairs.append([word_context_pair[1], word_context_pair[0][0]])
skip_gram_pairs.append([word_context_pair[1], word_context_pair[0][1]])
def get_skipgram_batch(batch_size):
instance_indices = list(range(len(skip_gram_pairs)))
np.random.shuffle(instance_indices)
batch = instance_indices[:batch_size]
x = [skip_gram_pairs[i][0] for i in batch]
y = [[skip_gram_pairs[i][1]] for i in batch]
return x, y
# batch example
x_batch, y_batch = get_skipgram_batch(8)
x_batch
y_batch
[index2word_map[word] for word in x_batch] [index2word_map[word[0]] for word in y_batch]
# Input data, labels train_inputs = tf.placeholder(tf.int32, shape = [batch_size])
train_labels = tf.placeholder(tf.int32, shape = [batch_size, 1])
# Embedding lookup table currently only implemented in CPU with
tf.name_scope("embeddings"):
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_dimension], -1.0, 1.0),
name = 'embedding')
# This is essentialy a lookup table
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Create variables for the NCE loss
nce_weights = tf.Variable(
tf.truncated_normal([vocabulary_size, embedding_dimension], stddev = 1.0 /
math.sqrt(embedding_dimension)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
loss = tf.reduce_mean(
tf.nn.nce_loss(weights = nce_weights, biases = nce_biases, inputs = embed,
labels = train_labels,num_sampled = negative_samples,
num_classes = vocabulary_size)) tf.summary.scalar("NCE_loss", loss)
# Learning rate decay
global_step = tf.Variable(0, trainable = False)
learningRate = tf.train.exponential_decay(learning_rate = 0.1,
global_step = global_step, decay_steps = 1000, decay_rate = 0.95, staircase = True)
train_step = tf.train.GradientDescentOptimizer(learningRate).minimize(loss)
merged = tf.summary.merge_all()
with tf.Session() as sess:
train_writer = tf.summary.FileWriter(LOG_DIR,
graph = tf.get_default_graph())
saver = tf.train.Saver()
with open(os.path.join(LOG_DIR, 'metadata.tsv'), "w") as metadata:
metadata.write('Name\tClass\n') for k, v in index2word_map.items():
metadata.write('%s\t%d\n' % (v, k))
config = projector.ProjectorConfig()
embedding = config.embeddings.add() embedding.tensor_name = embeddings.name
# Link this tensor to its metadata file (e.g. labels).
embedding.metadata_path = os.path.join(LOG_DIR, 'metadata.tsv')
projector.visualize_embeddings(train_writer, config)
tf.global_variables_initializer().run()
for step in range(1000):
x_batch, y_batch = get_skipgram_batch(batch_size) summary, _ = sess.run(
[merged, train_step], feed_dict = {train_inputs: x_batch, train_labels: y_batch})
train_writer.add_summary(summary, step)
if step % 100 == 0:
saver.save(sess, os.path.join(LOG_DIR, "w2v_model.ckpt"), step)
loss_value = sess.run(loss, feed_dict = {
train_inputs: x_batch, train_labels: y_batch})
print("Loss at %d: %.5f" % (step, loss_value))
# Normalize embeddings before using
norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims = True))
normalized_embeddings = embeddings /
norm normalized_embeddings_matrix = sess.run(normalized_embeddings)
ref_word = normalized_embeddings_matrix[word2index_map["one"]]
cosine_dists = np.dot(normalized_embeddings_matrix, ref_word)
ff = np.argsort(cosine_dists)[::-1][1:10] for f in ff: print(index2word_map[f])
print(cosine_dists[f])
TensorFlow - Single Layer Perceptron
要理解单层感知器,重要的是理解人工智能神经网络 (ANN)。人工智能神经网络是一种信息处理系统,其机制源于生物神经回路的功能。一个人工神经网络拥有许多彼此之间相连的处理单元。以下为人工神经网络的示意图 −
For understanding single layer perceptron, it is important to understand Artificial Neural Networks (ANN). Artificial neural networks is the information processing system the mechanism of which is inspired with the functionality of biological neural circuits. An artificial neural network possesses many processing units connected to each other. Following is the schematic representation of artificial neural network −

该图表表明隐藏单元与外部层进行通信。而输入和输出单元仅通过网络的隐藏层进行通信。
The diagram shows that the hidden units communicate with the external layer. While the input and output units communicate only through the hidden layer of the network.
节点的连接模式、层总数和输入与输出之间的节点级别以及每层神经元的数量定义了神经网络的架构。
The pattern of connection with nodes, the total number of layers and level of nodes between inputs and outputs with the number of neurons per layer define the architecture of a neural network.
有两种类型的架构。这些类型关注以下的人工神经网络功能 −
There are two types of architecture. These types focus on the functionality artificial neural networks as follows −
-
Single Layer Perceptron
-
Multi-Layer Perceptron
Single Layer Perceptron
单层感知器是创建的第一种提出的神经模型。神经元的局部存储器的内容包含一个权向量。单层感知器的计算在输入向量的总和计算上进行,每个向量值都乘以权向量的相应元素。输出中显示的值将是激活函数的输入。
Single layer perceptron is the first proposed neural model created. The content of the local memory of the neuron consists of a vector of weights. The computation of a single layer perceptron is performed over the calculation of sum of the input vector each with the value multiplied by corresponding element of vector of the weights. The value which is displayed in the output will be the input of an activation function.

让我们关注于使用 TensorFlow 对图像分类问题实现单层感知器。通过表示“逻辑回归”来说明单层感知器是最好的示例。
Let us focus on the implementation of single layer perceptron for an image classification problem using TensorFlow. The best example to illustrate the single layer perceptron is through representation of “Logistic Regression”.

现在,让我们考虑训练逻辑回归的以下基本步骤 −
Now, let us consider the following basic steps of training logistic regression −
-
The weights are initialized with random values at the beginning of the training.
-
For each element of the training set, the error is calculated with the difference between desired output and the actual output. The error calculated is used to adjust the weights.
-
The process is repeated until the error made on the entire training set is not less than the specified threshold, until the maximum number of iterations is reached.
用于评估逻辑回归的完整代码如下所述 −
The complete code for evaluation of logistic regression is mentioned below −
# Import MINST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot = True)
import tensorflow as tf
import matplotlib.pyplot as plt
# Parameters
learning_rate = 0.01
training_epochs = 25
batch_size = 100
display_step = 1
# tf Graph Input
x = tf.placeholder("float", [None, 784]) # mnist data image of shape 28*28 = 784
y = tf.placeholder("float", [None, 10]) # 0-9 digits recognition => 10 classes
# Create model
# Set model weights
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# Construct model
activation = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax
# Minimize error using cross entropy
cross_entropy = y*tf.log(activation)
cost = tf.reduce_mean\ (-tf.reduce_sum\ (cross_entropy,reduction_indices = 1))
optimizer = tf.train.\ GradientDescentOptimizer(learning_rate).minimize(cost)
#Plot settings
avg_set = []
epoch_set = []
# Initializing the variables init = tf.initialize_all_variables()
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(mnist.train.num_examples/batch_size)
# Loop over all batches
for i in range(total_batch):
batch_xs, batch_ys = \ mnist.train.next_batch(batch_size)
# Fit training using batch data sess.run(optimizer, \ feed_dict = {
x: batch_xs, y: batch_ys})
# Compute average loss avg_cost += sess.run(cost, \ feed_dict = {
x: batch_xs, \ y: batch_ys})/total_batch
# Display logs per epoch step
if epoch % display_step == 0:
print ("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost))
avg_set.append(avg_cost) epoch_set.append(epoch+1)
print ("Training phase finished")
plt.plot(epoch_set,avg_set, 'o', label = 'Logistic Regression Training phase')
plt.ylabel('cost')
plt.xlabel('epoch')
plt.legend()
plt.show()
# Test model
correct_prediction = tf.equal(tf.argmax(activation, 1), tf.argmax(y, 1))
# Calculate accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print
("Model accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))
Output
以上代码会生成以下输出 −
The above code generates the following output −

逻辑回归被认为是一种预测性分析。逻辑回归用于描述数据并解释一个因变量和一个或多个名义变量或自变量之间的关系。
The logistic regression is considered as a predictive analysis. Logistic regression is used to describe data and to explain the relationship between one dependent binary variable and one or more nominal or independent variables.

TensorFlow - Linear Regression
在本章中,我们将重点关注使用 TensorFlow 实现线性回归的基本示例。逻辑回归或线性回归是一种监督机器学习方法,用于对有序离散类别进行分类。我们在本章中的目标是构建一个模型,用户可以通过该模型来预测预测变量和一个或多个自变量之间的关系。
In this chapter, we will focus on the basic example of linear regression implementation using TensorFlow. Logistic regression or linear regression is a supervised machine learning approach for the classification of order discrete categories. Our goal in this chapter is to build a model by which a user can predict the relationship between predictor variables and one or more independent variables.
这两个变量之间的关系被认为是线性的。如果 y 是因变量,x 被视为自变量,那么两个变量的线性回归关系将如下方程式所示 −
The relationship between these two variables is cons −idered linear. If y is the dependent variable and x is considered as the independent variable, then the linear regression relationship of two variables will look like the following equation −
Y = Ax+b
我们将设计一个线性回归算法。这将使我们理解以下两个重要概念 −
We will design an algorithm for linear regression. This will allow us to understand the following two important concepts −
-
Cost Function
-
Gradient descent algorithms
线性回归的示意图如下所示 −
The schematic representation of linear regression is mentioned below −

线性回归方程的图形视图如下:
The graphical view of the equation of linear regression is mentioned below −

Steps to design an algorithm for linear regression
现在我们将了解有关设计线性回归算法的帮助步骤。
We will now learn about the steps that help in designing an algorithm for linear regression.
Step 1
对于绘制线性回归模块非常重要的模块是导入。我们开始导入 Python 库 NumPy 和 Matplotlib。
It is important to import the necessary modules for plotting the linear regression module. We start importing the Python library NumPy and Matplotlib.
import numpy as np
import matplotlib.pyplot as plt
Step 2
为逻辑回归定义必要的系数数量。
Define the number of coefficients necessary for logistic regression.
number_of_points = 500
x_point = []
y_point = []
a = 0.22
b = 0.78
Step 3
对变量进行迭代以生成 300 个围绕回归方程的随机点 −
Iterate the variables for generating 300 random points around the regression equation −
Y = 0.22x+0.78
for i in range(number_of_points):
x = np.random.normal(0.0,0.5)
y = a*x + b +np.random.normal(0.0,0.1) x_point.append([x])
y_point.append([y])
Step 4
使用 Matplotlib 查看生成点。
View the generated points using Matplotlib.
fplt.plot(x_point,y_point, 'o', label = 'Input Data') plt.legend() plt.show()
逻辑回归的完整代码如下 −
The complete code for logistic regression is as follows −
import numpy as np
import matplotlib.pyplot as plt
number_of_points = 500
x_point = []
y_point = []
a = 0.22
b = 0.78
for i in range(number_of_points):
x = np.random.normal(0.0,0.5)
y = a*x + b +np.random.normal(0.0,0.1) x_point.append([x])
y_point.append([y])
plt.plot(x_point,y_point, 'o', label = 'Input Data') plt.legend()
plt.show()
输入点数被认为是输入数据。
The number of points which is taken as input is considered as input data.

TensorFlow - TFLearn And Its Installation
TFLearn 可定义为用于 TensorFlow 框架的模块化和透明的深度学习环节。TFLearn 的主要目的为 TensorFlow 提供高级的 API 以实现新实验。
TFLearn can be defined as a modular and transparent deep learning aspect used in TensorFlow framework. The main motive of TFLearn is to provide a higher level API to TensorFlow for facilitating and showing up new experiments.
考虑 TFLearn 的以下重要特质 −
Consider the following important features of TFLearn −
-
TFLearn is easy to use and understand.
-
It includes easy concepts to build highly modular network layers, optimizers and various metrics embedded within them.
-
It includes full transparency with TensorFlow work system.
-
It includes powerful helper functions to train the built in tensors which accept multiple inputs, outputs and optimizers.
-
It includes easy and beautiful graph visualization.
-
The graph visualization includes various details of weights, gradients and activations.
执行以下命令安装 TFLearn −
Install TFLearn by executing the following command −
pip install tflearn
执行以上代码后,将生成以下输出 −
Upon execution of the above code, the following output will be generated −

下图显示了 TFLearn 与 Random Forest 分类程序的实现 −
The following illustration shows the implementation of TFLearn with Random Forest classifier −
from __future__ import division, print_function, absolute_import
#TFLearn module implementation
import tflearn
from tflearn.estimators import RandomForestClassifier
# Data loading and pre-processing with respect to dataset
import tflearn.datasets.mnist as mnist
X, Y, testX, testY = mnist.load_data(one_hot = False)
m = RandomForestClassifier(n_estimators = 100, max_nodes = 1000)
m.fit(X, Y, batch_size = 10000, display_step = 10)
print("Compute the accuracy on train data:")
print(m.evaluate(X, Y, tflearn.accuracy_op))
print("Compute the accuracy on test set:")
print(m.evaluate(testX, testY, tflearn.accuracy_op))
print("Digits for test images id 0 to 5:")
print(m.predict(testX[:5]))
print("True digits:")
print(testY[:5])
TensorFlow - CNN And RNN Difference
在此章节中,我们将专注于 CNN 和 RNN 之间的差异 −
In this chapter, we will focus on the difference between CNN and RNN −
CNN |
RNN |
It is suitable for spatial data such as images. |
RNN is suitable for temporal data, also called sequential data. |
CNN is considered to be more powerful than RNN. |
RNN includes less feature compatibility when compared to CNN. |
This network takes fixed size inputs and generates fixed size outputs. |
RNN can handle arbitrary input/output lengths. |
CNN is a type of feed-forward artificial neural network with variations of multilayer perceptrons designed to use minimal amounts of preprocessing. |
RNN unlike feed forward neural networks - can use their internal memory to process arbitrary sequences of inputs. |
CNNs use connectivity pattern between the neurons. This is inspired by the organization of the animal visual cortex, whose individual neurons are arranged in such a way that they respond to overlapping regions tiling the visual field. |
Recurrent neural networks use time-series information - what a user spoke last will impact what he/she will speak next. |
CNNs are ideal for images and video processing. |
RNNs are ideal for text and speech analysis. |
以下插图显示了 CNN 和 RNN 的示意图 -
Following illustration shows the schematic representation of CNN and RNN −

TensorFlow - Keras
Keras 是一个紧凑、易于学习、高级的 Python 库,运行在 TensorFlow 框架之上。它的创建重点是理解深度学习技术,例如创建神经网络层,同时保持形状和数学细节的概念。框架的创建可以是以下两种类型 -
Keras is compact, easy to learn, high-level Python library run on top of TensorFlow framework. It is made with focus of understanding deep learning techniques, such as creating layers for neural networks maintaining the concepts of shapes and mathematical details. The creation of freamework can be of the following two types −
-
Sequential API
-
Functional API
考虑以下八个步骤在 Keras 中创建深度学习模型 -
Consider the following eight steps to create deep learning model in Keras −
-
Loading the data
-
Preprocess the loaded data
-
Definition of model
-
Compiling the model
-
Fit the specified model
-
Evaluate it
-
Make the required predictions
-
Save the model
我们将使用 Jupyter Notebook 执行和显示输出,如下所示 -
We will use the Jupyter Notebook for execution and display of output as shown below −
Step 1 - 首先实现加载数据和预处理加载的数据以执行深度学习模型。
Step 1 − Loading the data and preprocessing the loaded data is implemented first to execute the deep learning model.
import warnings
warnings.filterwarnings('ignore')
import numpy as np
np.random.seed(123) # for reproducibility
from keras.models import Sequential
from keras.layers import Flatten, MaxPool2D, Conv2D, Dense, Reshape, Dropout
from keras.utils import np_utils
Using TensorFlow backend.
from keras.datasets import mnist
# Load pre-shuffled MNIST data into train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
此步骤可以定义为“导入库和模块”,这意味着所有库和模块都被导入为初始步骤。
This step can be defined as “Import libraries and Modules” which means all the libraries and modules are imported as an initial step.
Step 2 - 在此步骤中,我们将定义模型架构 -
Step 2 − In this step, we will define the model architecture −
model = Sequential()
model.add(Conv2D(32, 3, 3, activation = 'relu', input_shape = (28,28,1)))
model.add(Conv2D(32, 3, 3, activation = 'relu'))
model.add(MaxPool2D(pool_size = (2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation = 'softmax'))
Step 3 - 让我们现在编译指定模型-
Step 3 − Let us now compile the specified model −
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
Step 4 - 我们现在将使用训练数据拟合模型-
Step 4 − We will now fit the model using training data −
model.fit(X_train, Y_train, batch_size = 32, epochs = 10, verbose = 1)
创建的迭代输出如下-
The output of iterations created is as follows −
Epoch 1/10 60000/60000 [==============================] - 65s -
loss: 0.2124 -
acc: 0.9345
Epoch 2/10 60000/60000 [==============================] - 62s -
loss: 0.0893 -
acc: 0.9740
Epoch 3/10 60000/60000 [==============================] - 58s -
loss: 0.0665 -
acc: 0.9802
Epoch 4/10 60000/60000 [==============================] - 62s -
loss: 0.0571 -
acc: 0.9830
Epoch 5/10 60000/60000 [==============================] - 62s -
loss: 0.0474 -
acc: 0.9855
Epoch 6/10 60000/60000 [==============================] - 59s -
loss: 0.0416 -
acc: 0.9871
Epoch 7/10 60000/60000 [==============================] - 61s -
loss: 0.0380 -
acc: 0.9877
Epoch 8/10 60000/60000 [==============================] - 63s -
loss: 0.0333 -
acc: 0.9895
Epoch 9/10 60000/60000 [==============================] - 64s -
loss: 0.0325 -
acc: 0.9898
Epoch 10/10 60000/60000 [==============================] - 60s -
loss: 0.0284 -
acc: 0.9910
TensorFlow - Distributed Computing
本章将重点介绍如何开始使用分布式 TensorFlow。目的是帮助开发人员理解不断重复出现的 TF 服务器等基本的分布式 TF 概念。我们将使用 Jupyter Notebook 来评估分布式 TensorFlow。下面提到了使用 TensorFlow 进行分布式计算的实现−
This chapter will focus on how to get started with distributed TensorFlow. The aim is to help developers understand the basic distributed TF concepts that are reoccurring, such as TF servers. We will use the Jupyter Notebook for evaluating distributed TensorFlow. The implementation of distributed computing with TensorFlow is mentioned below −
Step 1 − 导入分布式计算必需的重要模块−
Step 1 − Import the necessary modules mandatory for distributed computing −
import tensorflow as tf
Step 2 − 使用一个节点创建 TensorFlow 集群。让此节点负责一个名为“worker”且将在 localhost:2222 上操作一个任务的作业。
Step 2 − Create a TensorFlow cluster with one node. Let this node be responsible for a job that that has name "worker" and that will operate one take at localhost:2222.
cluster_spec = tf.train.ClusterSpec({'worker' : ['localhost:2222']})
server = tf.train.Server(cluster_spec)
server.target
以上脚本会生成以下输出:
The above scripts generate the following output −
'grpc://localhost:2222'
The server is currently running.
Step 3 − 可以通过执行以下命令来计算具有相应会话的服务器配置 −
Step 3 − The server configuration with respective session can be calculated by executing the following command −
server.server_def
上述命令生成以下输出 −
The above command generates the following output −
cluster {
job {
name: "worker"
tasks {
value: "localhost:2222"
}
}
}
job_name: "worker"
protocol: "grpc"
Step 4 − 使用 TensorFlow 启动以执行引擎为服务器的会话。使用 TensorFlow 创建一个本地服务器并使用 lsof 查找服务器的位置。
Step 4 − Launch a TensorFlow session with the execution engine being the server. Use TensorFlow to create a local server and use lsof to find out the location of the server.
sess = tf.Session(target = server.target)
server = tf.train.Server.create_local_server()
Step 5 − 查看此会话中可用的设备并关闭相应的会话。
Step 5 − View devices available in this session and close the respective session.
devices = sess.list_devices()
for d in devices:
print(d.name)
sess.close()
上述命令生成以下输出 −
The above command generates the following output −
/job:worker/replica:0/task:0/device:CPU:0
TensorFlow - Exporting
在这里,我们着重于 TensorFlow 中的 MetaGraph 形成。这将有助于我们理解 TensorFlow 中的导出模块。MetaGraph 包含基本信息,该信息对于在先前训练的图中训练、执行评估或运行推理是必需的。
Here, we will focus on MetaGraph formation in TensorFlow. This will help us understand export module in TensorFlow. The MetaGraph contains the basic information, which is required to train, perform evaluation, or run inference on a previously trained graph.
以下是相同的代码片段-
Following is the code snippet for the same −
def export_meta_graph(filename = None, collection_list = None, as_text = False):
"""this code writes `MetaGraphDef` to save_path/filename.
Arguments:
filename: Optional meta_graph filename including the path. collection_list:
List of string keys to collect. as_text: If `True`,
writes the meta_graph as an ASCII proto.
Returns:
A `MetaGraphDef` proto. """
下面提到典型用法模型之一-
One of the typical usage model for the same is mentioned below −
# Build the model ...
with tf.Session() as sess:
# Use the model ...
# Export the model to /tmp/my-model.meta.
meta_graph_def = tf.train.export_meta_graph(filename = '/tmp/my-model.meta')
TensorFlow - Multi-Layer Perceptron Learning
多层感知器定义了人工神经网络最复杂的架构。它基本上由多层感知器形成。
Multi-Layer perceptron defines the most complicated architecture of artificial neural networks. It is substantially formed from multiple layers of perceptron.
多层感知器学习的示意图如下所示-
The diagrammatic representation of multi-layer perceptron learning is as shown below −

MLP 网络通常用于监督学习格式。MLP 网络的典型学习算法也称为反向传播算法。
MLP networks are usually used for supervised learning format. A typical learning algorithm for MLP networks is also called back propagation’s algorithm.
现在,我们将重点放在 MLP 对图像分类问题的实施上。
Now, we will focus on the implementation with MLP for an image classification problem.
# Import MINST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot = True)
import tensorflow as tf
import matplotlib.pyplot as plt
# Parameters
learning_rate = 0.001
training_epochs = 20
batch_size = 100
display_step = 1
# Network Parameters
n_hidden_1 = 256
# 1st layer num features
n_hidden_2 = 256 # 2nd layer num features
n_input = 784 # MNIST data input (img shape: 28*28) n_classes = 10
# MNIST total classes (0-9 digits)
# tf Graph input
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
# weights layer 1
h = tf.Variable(tf.random_normal([n_input, n_hidden_1])) # bias layer 1
bias_layer_1 = tf.Variable(tf.random_normal([n_hidden_1]))
# layer 1 layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, h), bias_layer_1))
# weights layer 2
w = tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2]))
# bias layer 2
bias_layer_2 = tf.Variable(tf.random_normal([n_hidden_2]))
# layer 2
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, w), bias_layer_2))
# weights output layer
output = tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
# biar output layer
bias_output = tf.Variable(tf.random_normal([n_classes])) # output layer
output_layer = tf.matmul(layer_2, output) + bias_output
# cost function
cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
logits = output_layer, labels = y))
#cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(output_layer, y))
# optimizer
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)
# optimizer = tf.train.GradientDescentOptimizer(
learning_rate = learning_rate).minimize(cost)
# Plot settings
avg_set = []
epoch_set = []
# Initializing the variables
init = tf.global_variables_initializer()
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(mnist.train.num_examples / batch_size)
# Loop over all batches
for i in range(total_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
# Fit training using batch data sess.run(optimizer, feed_dict = {
x: batch_xs, y: batch_ys})
# Compute average loss
avg_cost += sess.run(cost, feed_dict = {x: batch_xs, y: batch_ys}) / total_batch
# Display logs per epoch step
if epoch % display_step == 0:
print
Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(avg_cost)
avg_set.append(avg_cost)
epoch_set.append(epoch + 1)
print
"Training phase finished"
plt.plot(epoch_set, avg_set, 'o', label = 'MLP Training phase')
plt.ylabel('cost')
plt.xlabel('epoch')
plt.legend()
plt.show()
# Test model
correct_prediction = tf.equal(tf.argmax(output_layer, 1), tf.argmax(y, 1))
# Calculate accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print
"Model Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})
上述代码行生成以下输出 -
The above line of code generates the following output −

TensorFlow - Hidden Layers of Perceptron
在本章中,我们将重点关注从称为 x 和 f(x) 的已知点集中学习的网络。一个隐藏层将构建这个简单的网络。
In this chapter, we will be focus on the network we will have to learn from known set of points called x and f(x). A single hidden layer will build this simple network.
感知器隐藏层的说明代码如下所示-
The code for the explanation of hidden layers of perceptron is as shown below −
#Importing the necessary modules
import tensorflow as tf
import numpy as np
import math, random
import matplotlib.pyplot as plt
np.random.seed(1000)
function_to_learn = lambda x: np.cos(x) + 0.1*np.random.randn(*x.shape)
layer_1_neurons = 10
NUM_points = 1000
#Training the parameters
batch_size = 100
NUM_EPOCHS = 1500
all_x = np.float32(np.random.uniform(-2*math.pi, 2*math.pi, (1, NUM_points))).T
np.random.shuffle(all_x)
train_size = int(900)
#Training the first 700 points in the given set x_training = all_x[:train_size]
y_training = function_to_learn(x_training)
#Training the last 300 points in the given set x_validation = all_x[train_size:]
y_validation = function_to_learn(x_validation)
plt.figure(1)
plt.scatter(x_training, y_training, c = 'blue', label = 'train')
plt.scatter(x_validation, y_validation, c = 'pink', label = 'validation')
plt.legend()
plt.show()
X = tf.placeholder(tf.float32, [None, 1], name = "X")
Y = tf.placeholder(tf.float32, [None, 1], name = "Y")
#first layer
#Number of neurons = 10
w_h = tf.Variable(
tf.random_uniform([1, layer_1_neurons],\ minval = -1, maxval = 1, dtype = tf.float32))
b_h = tf.Variable(tf.zeros([1, layer_1_neurons], dtype = tf.float32))
h = tf.nn.sigmoid(tf.matmul(X, w_h) + b_h)
#output layer
#Number of neurons = 10
w_o = tf.Variable(
tf.random_uniform([layer_1_neurons, 1],\ minval = -1, maxval = 1, dtype = tf.float32))
b_o = tf.Variable(tf.zeros([1, 1], dtype = tf.float32))
#build the model
model = tf.matmul(h, w_o) + b_o
#minimize the cost function (model - Y)
train_op = tf.train.AdamOptimizer().minimize(tf.nn.l2_loss(model - Y))
#Start the Learning phase
sess = tf.Session() sess.run(tf.initialize_all_variables())
errors = []
for i in range(NUM_EPOCHS):
for start, end in zip(range(0, len(x_training), batch_size),\
range(batch_size, len(x_training), batch_size)):
sess.run(train_op, feed_dict = {X: x_training[start:end],\ Y: y_training[start:end]})
cost = sess.run(tf.nn.l2_loss(model - y_validation),\ feed_dict = {X:x_validation})
errors.append(cost)
if i%100 == 0:
print("epoch %d, cost = %g" % (i, cost))
plt.plot(errors,label='MLP Function Approximation') plt.xlabel('epochs')
plt.ylabel('cost')
plt.legend()
plt.show()
TensorFlow - Optimizers
优化器是扩展类,其中包括用于训练特定模型的附加信息。优化器类使用给定的参数进行初始化,但重要的是要记住不需要张量。优化器用于提高训练特定模型的速度和性能。
Optimizers are the extended class, which include added information to train a specific model. The optimizer class is initialized with given parameters but it is important to remember that no Tensor is needed. The optimizers are used for improving speed and performance for training a specific model.
TensorFlow 的基本优化器是-
The basic optimizer of TensorFlow is −
tf.train.Optimizer
此类在 tensorflow/python/training/optimizer.py 的指定路径中定义。
This class is defined in the specified path of tensorflow/python/training/optimizer.py.
以下是 Tensorflow 中的一些优化器-
Following are some optimizers in Tensorflow −
-
Stochastic Gradient descent
-
Stochastic Gradient descent with gradient clipping
-
Momentum
-
Nesterov momentum
-
Adagrad
-
Adadelta
-
RMSProp
-
Adam
-
Adamax
-
SMORMS3
我们将专注于随机梯度下降。为其创建优化器的说明如下:
We will focus on the Stochastic Gradient descent. The illustration for creating optimizer for the same is mentioned below −
def sgd(cost, params, lr = np.float32(0.01)):
g_params = tf.gradients(cost, params)
updates = []
for param, g_param in zip(params, g_params):
updates.append(param.assign(param - lr*g_param))
return updates
基本参数在特定函数内定义。在随后的章节中,我们将专注于具有优化器实现的梯度下降优化。
The basic parameters are defined within the specific function. In our subsequent chapter, we will focus on Gradient Descent Optimization with implementation of optimizers.
TensorFlow - XOR Implementation
在本章中,我们将了解使用 TensorFlow 的 XOR 实现。在开始使用 TensorFlow 中的 XOR 实现之前,让我们看看 XOR 表值。这将帮助我们理解加密和解密过程。
In this chapter, we will learn about the XOR implementation using TensorFlow. Before starting with XOR implementation in TensorFlow, let us see the XOR table values. This will help us understand encryption and decryption process.
A |
B |
A XOR B |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
XOR 密码加密方法基本上用来加密难以用蛮力方法(即通过生成与适当密钥匹配的随机加密密钥来)破解的数据。
XOR Cipher encryption method is basically used to encrypt data which is hard to crack with brute force method, i.e., by generating random encryption keys which match the appropriate key.
使用 XOR 密码实现的概念是定义一个 XOR 加密密钥,然后对指定字符串中的字符执行与该密钥的 XOR 操作,这是用户尝试进行加密的操作。现在,我们将专注于使用 TensorFlow 的 XOR 实现,如下所述:
The concept of implementation with XOR Cipher is to define a XOR encryption key and then perform XOR operation of the characters in the specified string with this key, which a user tries to encrypt. Now we will focus on XOR implementation using TensorFlow, which is mentioned below −
#Declaring necessary modules
import tensorflow as tf
import numpy as np
"""
A simple numpy implementation of a XOR gate to understand the backpropagation
algorithm
"""
x = tf.placeholder(tf.float64,shape = [4,2],name = "x")
#declaring a place holder for input x
y = tf.placeholder(tf.float64,shape = [4,1],name = "y")
#declaring a place holder for desired output y
m = np.shape(x)[0]#number of training examples
n = np.shape(x)[1]#number of features
hidden_s = 2 #number of nodes in the hidden layer
l_r = 1#learning rate initialization
theta1 = tf.cast(tf.Variable(tf.random_normal([3,hidden_s]),name = "theta1"),tf.float64)
theta2 = tf.cast(tf.Variable(tf.random_normal([hidden_s+1,1]),name = "theta2"),tf.float64)
#conducting forward propagation
a1 = tf.concat([np.c_[np.ones(x.shape[0])],x],1)
#the weights of the first layer are multiplied by the input of the first layer
z1 = tf.matmul(a1,theta1)
#the input of the second layer is the output of the first layer, passed through the
activation function and column of biases is added
a2 = tf.concat([np.c_[np.ones(x.shape[0])],tf.sigmoid(z1)],1)
#the input of the second layer is multiplied by the weights
z3 = tf.matmul(a2,theta2)
#the output is passed through the activation function to obtain the final probability
h3 = tf.sigmoid(z3)
cost_func = -tf.reduce_sum(y*tf.log(h3)+(1-y)*tf.log(1-h3),axis = 1)
#built in tensorflow optimizer that conducts gradient descent using specified
learning rate to obtain theta values
optimiser = tf.train.GradientDescentOptimizer(learning_rate = l_r).minimize(cost_func)
#setting required X and Y values to perform XOR operation
X = [[0,0],[0,1],[1,0],[1,1]]
Y = [[0],[1],[1],[0]]
#initializing all variables, creating a session and running a tensorflow session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
#running gradient descent for each iteration and printing the hypothesis
obtained using the updated theta values
for i in range(100000):
sess.run(optimiser, feed_dict = {x:X,y:Y})#setting place holder values using feed_dict
if i%100==0:
print("Epoch:",i)
print("Hyp:",sess.run(h3,feed_dict = {x:X,y:Y}))
上面这一行代码生成的输出如以下截图所示 −
The above line of code generates an output as shown in the screenshot below −

TensorFlow - Gradient Descent Optimization
梯度下降优化被认为是数据科学中的一个重要概念。
Gradient descent optimization is considered to be an important concept in data science.
考虑下面所示的步骤来了解梯度下降优化的实现 −
Consider the steps shown below to understand the implementation of gradient descent optimization −
Step 1
包含必需的模块并声明 x 和 y 变量,我们将通过它们来定义梯度下降优化。
Include necessary modules and declaration of x and y variables through which we are going to define the gradient descent optimization.
import tensorflow as tf
x = tf.Variable(2, name = 'x', dtype = tf.float32)
log_x = tf.log(x)
log_x_squared = tf.square(log_x)
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(log_x_squared)
Step 2
初始化必要的变量,并调用优化器为其定义并使用各自函数调用它。
Initialize the necessary variables and call the optimizers for defining and calling it with respective function.
init = tf.initialize_all_variables()
def optimize():
with tf.Session() as session:
session.run(init)
print("starting at", "x:", session.run(x), "log(x)^2:", session.run(log_x_squared))
for step in range(10):
session.run(train)
print("step", step, "x:", session.run(x), "log(x)^2:", session.run(log_x_squared))
optimize()
上面这一行代码生成的输出如以下截图所示 −
The above line of code generates an output as shown in the screenshot below −

我们可以看到必要的 epoch 和迭代如输出所示已经计算出来。
We can see that the necessary epochs and iterations are calculated as shown in the output.
TensorFlow - Forming Graphs
偏微分方程 (PDE) 是一种包含多个自变量的未知函数偏导数的微分方程。关于偏微分方程,我们将专注于创建新的图形。
A partial differential equation (PDE) is a differential equation, which involves partial derivatives with unknown function of several independent variables. With reference to partial differential equations, we will focus on creating new graphs.
让我们假设有一个尺寸为 500*500 平方的池塘 −
Let us assume there is a pond with dimension 500*500 square −
N = 500
N = 500
现在,我们将计算偏微分方程,并使用它形成相应的图形。考虑下面给出的计算图形的步骤。
Now, we will compute partial differential equation and form the respective graph using it. Consider the steps given below for computing graph.
Step 1 − 导入模拟库。
Step 1 − Import libraries for simulation.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
Step 2 − 包含将二维阵列转换为卷积核和简化的二维卷积运算的函数。
Step 2 − Include functions for transformation of a 2D array into a convolution kernel and simplified 2D convolution operation.
def make_kernel(a):
a = np.asarray(a)
a = a.reshape(list(a.shape) + [1,1])
return tf.constant(a, dtype=1)
def simple_conv(x, k):
"""A simplified 2D convolution operation"""
x = tf.expand_dims(tf.expand_dims(x, 0), -1)
y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding = 'SAME')
return y[0, :, :, 0]
def laplace(x):
"""Compute the 2D laplacian of an array"""
laplace_k = make_kernel([[0.5, 1.0, 0.5], [1.0, -6., 1.0], [0.5, 1.0, 0.5]])
return simple_conv(x, laplace_k)
sess = tf.InteractiveSession()
Step 3 − 包含迭代次数并计算图形以相应地显示记录。
Step 3 − Include the number of iterations and compute the graph to display the records accordingly.
N = 500
# Initial Conditions -- some rain drops hit a pond
# Set everything to zero
u_init = np.zeros([N, N], dtype = np.float32)
ut_init = np.zeros([N, N], dtype = np.float32)
# Some rain drops hit a pond at random points
for n in range(100):
a,b = np.random.randint(0, N, 2)
u_init[a,b] = np.random.uniform()
plt.imshow(u_init)
plt.show()
# Parameters:
# eps -- time resolution
# damping -- wave damping
eps = tf.placeholder(tf.float32, shape = ())
damping = tf.placeholder(tf.float32, shape = ())
# Create variables for simulation state
U = tf.Variable(u_init)
Ut = tf.Variable(ut_init)
# Discretized PDE update rules
U_ = U + eps * Ut
Ut_ = Ut + eps * (laplace(U) - damping * Ut)
# Operation to update the state
step = tf.group(U.assign(U_), Ut.assign(Ut_))
# Initialize state to initial conditions
tf.initialize_all_variables().run()
# Run 1000 steps of PDE
for i in range(1000):
# Step simulation
step.run({eps: 0.03, damping: 0.04})
# Visualize every 50 steps
if i % 500 == 0:
plt.imshow(U.eval())
plt.show()
图形如下所示 −
The graphs are plotted as shown below −


Image Recognition using TensorFlow
TensorFlow 包括图像识别的特殊功能,这些图像存储在特定文件夹中。与相对相同的图像相比,将容易为安全目的实现此逻辑。
TensorFlow includes a special feature of image recognition and these images are stored in a specific folder. With relatively same images, it will be easy to implement this logic for security purposes.
图像识别代码实现的文件夹结构如下所示:
The folder structure of image recognition code implementation is as shown below −

dataset_image 包含需要加载的相关图像。我们将专注于图像识别以及其中定义的徽标。图像使用 “load_data.py” 脚本加载,它有助于记录其中的各种图像识别模块。
The dataset_image includes the related images, which need to be loaded. We will focus on image recognition with our logo defined in it. The images are loaded with “load_data.py” script, which helps in keeping a note on various image recognition modules within them.
import pickle
from sklearn.model_selection import train_test_split
from scipy import misc
import numpy as np
import os
label = os.listdir("dataset_image")
label = label[1:]
dataset = []
for image_label in label:
images = os.listdir("dataset_image/"+image_label)
for image in images:
img = misc.imread("dataset_image/"+image_label+"/"+image)
img = misc.imresize(img, (64, 64))
dataset.append((img,image_label))
X = []
Y = []
for input,image_label in dataset:
X.append(input)
Y.append(label.index(image_label))
X = np.array(X)
Y = np.array(Y)
X_train,y_train, = X,Y
data_set = (X_train,y_train)
save_label = open("int_to_word_out.pickle","wb")
pickle.dump(label, save_label)
save_label.close()
图像训练有助于存储指定文件夹中的可识别模式。
The training of images helps in storing the recognizable patterns within specified folder.
import numpy
import matplotlib.pyplot as plt
from keras.layers import Dropout
from keras.layers import Flatten
from keras.constraints import maxnorm
from keras.optimizers import SGD
from keras.layers import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
import load_data
from keras.models import Sequential
from keras.layers import Dense
import keras
K.set_image_dim_ordering('tf')
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load data
(X_train,y_train) = load_data.data_set
# normalize inputs from 0-255 to 0.0-1.0
X_train = X_train.astype('float32')
#X_test = X_test.astype('float32')
X_train = X_train / 255.0
#X_test = X_test / 255.0
# one hot encode outputs
y_train = np_utils.to_categorical(y_train)
#y_test = np_utils.to_categorical(y_test)
num_classes = y_train.shape[1]
# Create the model
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), padding = 'same',
activation = 'relu', kernel_constraint = maxnorm(3)))
model.add(Dropout(0.2))
model.add(Conv2D(32, (3, 3), activation = 'relu', padding = 'same',
kernel_constraint = maxnorm(3)))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Flatten())
model.add(Dense(512, activation = 'relu', kernel_constraint = maxnorm(3)))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation = 'softmax'))
# Compile model
epochs = 10
lrate = 0.01
decay = lrate/epochs
sgd = SGD(lr = lrate, momentum = 0.9, decay = decay, nesterov = False)
model.compile(loss = 'categorical_crossentropy', optimizer = sgd, metrics = ['accuracy'])
print(model.summary())
#callbacks = [keras.callbacks.EarlyStopping(
monitor = 'val_loss', min_delta = 0, patience = 0, verbose = 0, mode = 'auto')]
callbacks = [keras.callbacks.TensorBoard(log_dir='./logs',
histogram_freq = 0, batch_size = 32, write_graph = True, write_grads = False,
write_images = True, embeddings_freq = 0, embeddings_layer_names = None,
embeddings_metadata = None)]
# Fit the model
model.fit(X_train, y_train, epochs = epochs,
batch_size = 32,shuffle = True,callbacks = callbacks)
# Final evaluation of the model
scores = model.evaluate(X_train, y_train, verbose = 0)
print("Accuracy: %.2f%%" % (scores[1]*100))
# serialize model to JSONx
model_json = model.to_json()
with open("model_face.json", "w") as json_file:
json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model_face.h5")
print("Saved model to disk")
上面的代码行生成一个输出,如下所示:
The above line of code generates an output as shown below −


Recommendations for Neural Network Training
在本章中,我们将了解 TensorFlow 框架可以实现的神经网络训练的各个方面。
In this chapter, we will understand the various aspects of neural network training which can be implemented using TensorFlow framework.
以下是可以评估的十条建议−
Following are the ten recommendations, which can be evaluated −
Back Propagation
反向传播是一种计算偏导数的简单方法,包括最适合神经网络的基本构成形式。
Back propagation is a simple method to compute partial derivatives, which includes the basic form of composition best suitable for neural nets.

Stochastic Gradient Descent
在随机梯度下降中, batch 是示例的总数,用户使用该示例在单个迭代中计算梯度。到目前为止,假定批次是整个数据集。最好的说明是在 Google 规模上工作;数据集通常包含数十亿甚至数百亿个示例。
In stochastic gradient descent, a batch is the total number of examples, which a user uses to calculate the gradient in a single iteration. So far, it is assumed that the batch has been the entire data set. The best illustration is working at Google scale; data sets often contain billions or even hundreds of billions of examples.

Learning Rate Decay

采用学习率是梯度下降优化最重要的特性之一。这对于 TensorFlow 实现至关重要。
Adapting the learning rate is one of the most important features of gradient descent optimization. This is crucial to TensorFlow implementation.
Dropout
具有大量参数的深度神经网络构成了强大的机器学习系统。然而,过拟合是此类网络中的一个严重问题。
Deep neural nets with a large number of parameters form powerful machine learning systems. However, over fitting is a serious problem in such networks.
