TensorFlow 的简单例子 | Linux 中国

TensorFlow 的简单例子 | Linux 中国
在本文中,我们将看一些 TensorFlow 的例子,并从中感受到在定义张量和使用张量做数学计算方面有多么容易,我还会举些别的机器学习相关的例子。-- Likegeeks

本文导航? 三维张量

53%

? 使用 TensorFlow 生成或裁剪图片

68%

? 使用 TensorFlow 改变图像

79%

编译自 | http://www.codementor.io/likegeeks/define-and-use-tensors-using-simple-tensorflow-examples-ggdgwoy4u

 

 作者 | Likegeeks



 译者 | ghsgz

在本文中,我们将看一些 TensorFlow 的例子,并从中感受到在定义张量tensor和使用张量做数学计算方面有多么容易,我还会举些别的机器学习相关的例子。

TensorFlow 是什么?

TensorFlow 是 Google 为了解决复杂的数学计算耗时过久的问题而开发的一个库。

事实上,TensorFlow 能干许多事。比如:

? 求解复杂数学表达式? 机器学习技术。你往其中输入一组数据样本用以训练,接着给出另一组数据样本基于训练的数据而预测结果。这就是人工智能了!? 支持 GPU 。你可以使用 GPU(图像处理单元)替代 CPU 以更快的运算。TensorFlow 有两个版本: CPU 版本和 GPU 版本。

开始写例子前,需要了解一些基本知识。

什么是张量?

张量tensor是 TensorFlow 使用的主要的数据块,它类似于变量,TensorFlow 使用它来处理数据。张量拥有维度和类型的属性。

维度指张量的行和列数,读到后面你就知道了,我们可以定义一维张量、二维张量和三维张量。

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

定义一维张量

可以这样来定义一个张量:创建一个 NumPy 数组(LCTT 译注:NumPy 系统是 Python 的一种开源数字扩展,包含一个强大的 N 维数组对象 Array,用来存储和处理大型矩阵 )或者一个 

Python 列表

[1]

 ,然后使用 tf_convert_to_tensor 函数将其转化成张量。

可以像下面这样,使用 NumPy 创建一个数组:

  • import

    numpy

    as

    np arr

    =

    np

    .

    array

    ([

    1

    ,

    5.5

    ,

    3

    ,

    15

    ,

    20

    ])

  • 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

    )

  • 它和 Python 列表很像,但是在这里,元素之间没有逗号。

    现在使用 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

    )])

  • 利用 TenserFlow ,你能做许多数学运算。现在我们需要对这两个数组求和。

    使用加法函数来求和:

  • 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 库导入一张图片。如果你的系统中没有 matplotlib ,可以 

    使用 pip

    [2]

    来安装它。

    将图片放在 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 变量值:

  • 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 有多么容易。

    via: 

    http://www.codementor.io/likegeeks/define-and-use-tensors-using-simple-tensorflow-examples-ggdgwoy4u

    作者:

    LikeGeeks

    [4]

     译者:

    ghsgz

     校对:

    wxy

    本文由 

    LCTT

     原创编译,

    Linux中国

     荣誉推出

    LCTT 译者TensorFlow 的简单例子 | Linux 中国
    ghsgz ??共计翻译:

    1

     篇贡献时间:3 天

    推荐文章

    < 左右滑动查看相关文章 >

    TensorFlow 的简单例子 | Linux 中国
    TensorFlow 的简单例子 | Linux 中国
    TensorFlow 的简单例子 | Linux 中国
    TensorFlow 的简单例子 | Linux 中国
    TensorFlow 的简单例子 | Linux 中国
    TensorFlow 的简单例子 | Linux 中国

    点击图片、输入文章 ID 或识别二维码直达

    原文链接请访问“

    原文链接

    ”获得可点击的文内链接、全尺寸原图和相关文章。