TensorFlow简介

TensorFlow是由Google开发的用于解决复杂数学问题的库。本篇介绍将简述TensorFlow示例,如何定义、使用张量执行数学运算,以及查看其他机器学习相关示例。

什么是TensorFlow?

TensorFlow是Google开发的一个库,用于解决复杂的数学问题,使用TensorFlow将为您节省不少时间。

TensorFlow可以做很多事情,比如:

  • 解决复杂的数学表达式
  • 快速执行机器学习,  在这种机器学习技术中,您可以为其提供一个训练数据样本,然后根据训练数据给出另一个数据样本来预测结果。
  • 提供GPU支持。您可以使用GPU(图形处理单元)而不是使用CPU来加快处理速度。TensorFlow有两个版本的您可以下载CPU版本或者GPU版本。

在开始使用TensorFlow示例之前,我们需要了解一些基本知识。

什么是张量?

张量是TensorFlow使用的主要数据块。它们就像TensorFlow用来处理数据的变量。每个张量都有一个维度和一个类型。

维度是指张量的行和列。您可以定义一维张量,二维张量和三维张量,关于张量详细使用我们将在后面看到。

类型是指张量元素的数据类型。

定义一维张量

为了定义张量,我们将创建一个NumPy数组或Python列表,并使用tf_convert_to_tensor 函数将其转换为张量。

我们将使用NumPy来创建一个这样的数组:

import numpy as np
arr = np.array([1, 5.5, 3, 15, 20])

结果显示了阵列的尺寸和形状。

import numpy as np   
arr = np.array([1, 5.5, 3, 15, 20])   
print(arr)   
print (arr.ndim)   
print (arr.shape)   
print (arr.dtype)

现在我们将使用tf_convert_to_tensor  函数将此数组转换为张量  。

import numpy as np
import tensorflow as tf
arr = np.array([1, 5.5, 3, 15, 20])
tensor = tf.convert_to_tensor(arr,tf.float64)
print(tensor)

从结果中,可以看到张量的定义,但看不到张量的元素。

要查看张量的元素,可以像这样运行一个会话:

import numpy as np
import tensorflow as tf
arr = np.array([1, 5.5, 3, 15, 20])
tensor = tf.convert_to_tensor(arr,tf.float64)
sess = tf.Session()
print(sess.run(tensor))
print(sess.run(tensor[1]))

定义二维张量

这与一维数组完全相同,但是这次我们需要这样定义数组:

arr = np.array([(1, 5.5, 3, 15, 20),(10, 20, 30, 40, 50), (60, 70, 80, 90,100)])

你可以把它转换成这样的张量:

import numpy as np
import tensorflow as tf
arr = np.array([(1, 5.5, 3, 15, 20),(10, 20, 30, 40, 50), (60, 70, 80, 90, 100)])
tensor = tf.convert_to_tensor(arr)
sess = tf.Session()
print(sess.run(tensor))

现在你知道如何定义张量。如何让它们之间进行一些数学运算呢?

在张量上计算

假设我们有两个这样的数组:

arr1 = np.array([(1,2,3),(4,5,6)]) 
arr2 = np.array([(7,8,9),(10,11,12)])

我们需要得到他们的总和。您可以使用TensorFlow执行许多数学操作。

你可以使用这样的add函数:

arr3 = tf.add(arr1,arr2)

整个代码将是这样的:

import numpy as np
import tensorflow as tf
arr1 = np.array([(1,2,3),(4,5,6)])
arr2 = np.array([(7,8,9),(10,11,12)])
arr3 = tf.add(arr1,arr2)
sess = tf.Session()
tensor = sess.run(arr3)
print(tensor)

当然你可以像这样来繁殖数组:

import numpy as np
import tensorflow as tf
arr1 = np.array([(1,2,3),(4,5,6)])
arr2 = np.array([(7,8,9),(10,11,12)])
arr3 = tf.multiply(arr1,arr2)
sess = tf.Session()
tensor = sess.run(arr3)
print(tensor)

明白了吗?

三维张量

我们已经看到了如何处理一维和二维张量。现在,我们将处理三维张量。但这一次,我们不使用数字;,而使用RGB图像,其中每一幅图像都由x,y和z坐标指定。

这些坐标是宽度,高度和颜色深度。

首先,我们使用导入图像matplotlib。 如果您的系统上没有安装这个库,可以使用pip install matplotlib来安装。

现把你的文件放在Python文件所在的同一个目录下,matplotlib 然后像这样导入图像:

import matplotlib.image as img
myfile = "likegeeks.png"
myimage = img.imread(myfile)
print(myimage.ndim)
print(myimage.shape)

正如你所看到的,这是一个三维图像,宽度为150,高度为150,颜色深度为3。

怎样查看图像呢?

import matplotlib.image as img
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile)
plot.imshow(myimage)
plot.show()

酷!

那么使用TensorFlow处理图像呢?超级简单。

裁剪或切片图像使用TensorFlow

首先,我们把这些值放在一个占位符上,如下所示:

myimage = tf.placeholder("int32",[None,None,3])

为了裁剪图像,我们将使用如下的切片运算符:

cropped = tf.slice(myimage,[10,0,0],[16,-1,-1])

最后,运行会话:

result = sess.run(cropped, feed_dict={slice: myimage})

然后你可以看到使用的结果图像matplotlib

整个代码将是这样的:

import tensorflow as tf
import matplotlib.image as img 
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile) 
slice = tf.placeholder("int32",[None,None,3])
cropped = tf.slice(myimage,[10,0,0],[16,-1,-1])
sess = tf.Session()
result = sess.run(cropped, feed_dict={slice: myimage})
plot.imshow(result)
plot.show()

真棒!

使用Tensorflow移调图像

在这个TensorFlow例子中,我们将使用TensorFlow做一个简单的转换。

首先,指定输入的图像并初始化TensorFlow变量:

myfile = "likegeeks.png"
myimage = img.imread(myfile)
image = tf.Variable(myimage,name='image')
vars = tf.global_variables_initializer()

然后我们将使用这个  transpose 函数来翻转输入网格的0和1轴:

sess = tf.Session()
flipped = tf.transpose(image, perm=[1,0,2])
sess.run(vars)
result=sess.run(flipped)

然后,您可以使用显示结果图像matplotlib

import tensorflow as tf
import matplotlib.image as img
import matplotlib.pyplot as plot
myfile = "likegeeks.png"
myimage = img.imread(myfile)
image = tf.Variable(myimage,name='image')
vars = tf.global_variables_initializer()
sess = tf.Session()
flipped = tf.transpose(image, perm=[1,0,2])
sess.run(vars)
result=sess.run(flipped)
plot.imshow(result)
plot.show()

这些TensorFlow示例都向您展示了如何使用TensorFlow进行操作。

加油,本次基础使用简介就到这~

原文链接:https://dzone.com/articles/tensorflow-simplified-examples

原文作者:Seco Max

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

TensorFlow入门:MNIST数据的单层逻辑回归代码单层回归代码输出结果

1874
来自专栏小鹏的专栏

02 The TensorFlow Way(1)

The TensorFlow Way Introduction:          现在我们介绍了TensorFlow如何创建张量,使用变量和占位符,我们将介...

19910
来自专栏人工智能LeadAI

译文 | 与TensorFlow的第一次接触 第三章:聚类

前一章节中介绍的线性回归是一种监督学习算法,我们使用数据与输出值(标签)来建立模型拟合它们。但是我们并不总是有已经打标签的数据,却仍然想去分析它们。这种情况下,...

3946
来自专栏xingoo, 一个梦想做发明家的程序员

cuda中的二分查找

  使用背景 通常,在做高性能计算时,我们需要随机的连接某些点。这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大。因此,采用加权值得方法: v...

1865
来自专栏拂晓风起

妙用Pixel bender执行复杂运算/普通数据运算 传递Vector数组

1002
来自专栏图形学与OpenGL

附加实验1 Sierpinski三角形

    Sierpinski三角形是一种分形图形,它是递归地构造的。最常见的构造方法如下图所示:把一个三角形分成四等份,挖掉中间那一份,然后继续对另外三个三角形...

1042
来自专栏数说工作室

【SAS Says】扩展篇:IML(2)

上一篇“高级篇:IML(1)”发出来之后,有朋友反映东西东西太简单了,根本不能算“高级”。想想也是,暂时还没有介绍太复杂的SAS程序,于是决定将本篇定为“扩展篇...

2866
来自专栏深度学习与计算机视觉

理解ResNet结构与TensorFlow代码分析

该博客主要以TensorFlow提供的ResNet代码为主,但是我并不想把它称之为代码解析,因为代码和方法,实践和理论总是缺一不可。 github地址,其中...

6997
来自专栏WeaponZhi

使用Octave来学习Machine Learning(二)

前言 上一篇我们介绍了 Octave 的一些基本情况,大家对 Octave 应该已经有了一个基本的了解,我相信看这篇文章的朋友已经在自己的电脑中安装好 Ocat...

3426
来自专栏达摩兵的技术空间

js实现万级数字转汉字显示

完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五。

1202

扫码关注云+社区