TensorFlow相关 API-云服务器玩法在线实验

[复制链接]
查看: 559|回复: 0

34

主题

34

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2020-12-28 09:45:10 | 显示全部楼层 |阅读模式
实验内容TensorFlow是由Google开发的用于数值计算的开源软件库,实验介绍基本的 TensorFlow API,TensorFlow 是 Google 开源的深度学习框架,相关 API 本教程持续更新中。

首次可免费使用云主机 3 小时 ,到期后云主机将被重置并退库,若想保留成果请及时留用。


免费在线实验地址:点击进入

实验资源:云服务器,没有云服务器的朋友推荐1折抢购:69元/年的阿里云服务器或者88元/年的腾讯云服务器

软件环境Ubuntu 16.04.1 LTS 64 位

1、TensorFlow 相关函数理解
tf.nn.conv2d

  1. conv2d(
  2.     input,
  3.     filter,
  4.     strides,
  5.     padding,
  6.     use_cudnn_on_gpu=True,
  7.     data_format='NHWC',
  8.     name=None
  9. )
复制代码
功能说明:参数列表:
参数名
必选
类型
说明
inputtensor是一个 4 维的 tensor,即 [ batch, in_height, in_width, in_channels ](若 input 是图像,[ 训练时一个 batch 的图片数量, 图片高度, 图片宽度, 图像通道数 ])
filtertensor是一个 4 维的 tensor,即 [ filter_height, filter_width, in_channels, out_channels ](若 input 是图像,[ 卷积核的高度,卷积核的宽度,图像通道数,卷积核个数 ]),filter 的 in_channels 必须和 input 的 in_channels 相等
strides列表长度为 4 的 list,卷积时候在 input 上每一维的步长,一般 strides[0] = strides[3] = 1
paddingstring只能为 " VALID "," SAME " 中之一,这个值决定了不同的卷积方式。VALID 丢弃方式;SAME:补全方式
use_cudnn_on_gpubool是否使用 cudnn 加速,默认为 true
data_formatstring只能是 " NHWC ", " NCHW ",默认 " NHWC "
namestring运算名称


示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 conv2d.py,内容可参考:
示例代码:/home/ubuntu/conv2d.py
  1. import tensorflow as tf

  2. a = tf.constant([1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,0,0],dtype=tf.float32,shape=[1,5,5,1])
  3. b = tf.constant([1,0,1,0,1,0,1,0,1],dtype=tf.float32,shape=[3,3,1,1])
  4. c = tf.nn.conv2d(a,b,strides=[1, 2, 2, 1],padding='VALID')
  5. d = tf.nn.conv2d(a,b,strides=[1, 2, 2, 1],padding='SAME')
  6. with tf.Session() as sess:
  7.     print ("c shape:")
  8.     print (c.shape)
  9.     print ("c value:")
  10.     print (sess.run(c))
  11.     print ("d shape:")
  12.     print (d.shape)
  13.     print ("d value:")
  14.     print (sess.run(d))
复制代码
然后执行:
  1. cd /home/ubuntu;
  2. python conv2d.py
复制代码
执行结果:
  1. c shape:
  2. (1, 3, 3, 1)
  3. c value:
  4. [[[[ 4.]
  5.    [ 3.]
  6.    [ 4.]]

  7.   [[ 2.]
  8.    [ 4.]
  9.    [ 3.]]

  10.   [[ 2.]
  11.    [ 3.]
  12.    [ 4.]]]]
  13. d shape:
  14. (1, 5, 5, 1)
  15. d value:
  16. [[[[ 2.]
  17.    [ 2.]
  18.    [ 3.]
  19.    [ 1.]
  20.    [ 1.]]

  21.   [[ 1.]
  22.    [ 4.]
  23.    [ 3.]
  24.    [ 4.]
  25.    [ 1.]]

  26.   [[ 1.]
  27.    [ 2.]
  28.    [ 4.]
  29.    [ 3.]
  30.    [ 3.]]

  31.   [[ 1.]
  32.    [ 2.]
  33.    [ 3.]
  34.    [ 4.]
  35.    [ 1.]]

  36.   [[ 0.]
  37.    [ 2.]
  38.    [ 2.]
  39.    [ 1.]
  40.    [ 1.]]]]
复制代码
tf.nn.relu
  1. relu(
  2.     features,
  3.     name=None
  4. )
复制代码
功能说明:参数列表:
参数名
必选
类型
说明
featurestensor是以下类型float32, float64, int32, int64, uint8, int16, int8, uint16, half
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 relu.py,内容可参考:
示例代码:/home/ubuntu/relu.py
  1. import tensorflow as tf

  2. a = tf.constant([1,-2,0,4,-5,6])
  3. b = tf.nn.relu(a)
  4. with tf.Session() as sess:
  5.     print (sess.run(b))
复制代码
然后执行:
  1. cd /home/ubuntu;
  2. python relu.py
复制代码
执行结果:
  1. [1 0 0 4 0 6]
复制代码
tf.nn.max_pool
  1. max_pool(
  2.     value,
  3.     ksize,
  4.     strides,
  5.     padding,
  6.     data_format='NHWC',
  7.     name=None
  8. )
复制代码
功能说明:参数列表:
参数名
必选
类型
说明
valuetensor4 维的张量,即 [ batch, height, width, channels ],数据类型为 tf.float32
ksize列表池化窗口的大小,长度为 4 的 list,一般是 [1, height, width, 1],因为不在 batch 和 channels 上做池化,所以第一个和最后一个维度为 1
strides列表池化窗口在每一个维度上的步长,一般 strides[0] = strides[3] = 1
paddingstring只能为 " VALID "," SAME " 中之一,这个值决定了不同的池化方式。VALID 丢弃方式;SAME:补全方式
data_formatstring只能是 " NHWC ", " NCHW ",默认" NHWC "
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 max_pool.py,内容可参考:
示例代码:/home/ubuntu/max_pool.py
  1. import tensorflow as tf

  2. a = tf.constant([1,3,2,1,2,9,1,1,1,3,2,3,5,6,1,2],dtype=tf.float32,shape=[1,4,4,1])
  3. b = tf.nn.max_pool(a,ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='VALID')
  4. c = tf.nn.max_pool(a,ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='SAME')
  5. with tf.Session() as sess:
  6.     print ("b shape:")
  7.     print (b.shape)
  8.     print ("b value:")
  9.     print (sess.run(b))
  10.     print ("c shape:")
  11.     print (c.shape)
  12.     print ("c value:")
  13.     print (sess.run(c))
复制代码
然后执行:
  1. cd /home/ubuntu;
  2. python max_pool.py
复制代码
执行结果:
  1. b shape:
  2. (1, 2, 2, 1)
  3. b value:
  4. [[[[ 9.]
  5.    [ 2.]]

  6.   [[ 6.]
  7.    [ 3.]]]]
  8. c shape:
  9. (1, 2, 2, 1)
  10. c value:
  11. [[[[ 9.]
  12.    [ 2.]]

  13.   [[ 6.]
  14.    [ 3.]]]]
复制代码
tf.nn.dropout
  1. dropout(
  2.     x,
  3.     keep_prob,
  4.     noise_shape=None,
  5.     seed=None,
  6.     name=None
  7. )
复制代码
功能说明:参数列表:
参数名
必选
类型
说明
xtensor输出元素是 x 中的元素以 keep_prob 概率除以 keep_prob,否则为 0
keep_probscalar Tensordropout 的概率,一般是占位符
noise_shapetensor默认情况下,每个元素是否 dropout 是相互独立。如果指定 noise_shape,若 noise_shape == shape(x),该维度的元素是否 dropout 是相互独立,若 noise_shape != shape(x) 该维度元素是否 dropout 不相互独立,要么一起 dropout 要么一起保留
seed数值如果指定该值,每次 dropout 结果相同
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 dropout.py,内容可参考:
示例代码:/home/ubuntu/dropout.py
  1. import tensorflow as tf

  2. a = tf.constant([1,2,3,4,5,6],shape=[2,3],dtype=tf.float32)
  3. b = tf.placeholder(tf.float32)
  4. c = tf.nn.dropout(a,b,[2,1],1)
  5. with tf.Session() as sess:
  6.     sess.run(tf.global_variables_initializer())
  7.     print (sess.run(c,feed_dict={b:0.75}))
复制代码
然后执行:
  1. cd /home/ubuntu;
  2. python dropout.py
复制代码
执行结果:
  1. [[ 0.          0.          0.        ]
  2. [ 5.33333349  6.66666651  8.        ]]
复制代码
tf.nn.sigmoid_cross_entropy_with_logits
  1. sigmoid_cross_entropy_with_logits(
  2.     _sentinel=None,
  3.     labels=None,
  4.     logits=None,
  5.     name=None
  6. )
复制代码
功能说明:
先对 logits 通过 sigmoid 计算,再计算交叉熵,交叉熵代价函数可以参考 CS231n: Convolutional Neural Networks for Visual Recognition
参数列表:
参数名
必选
类型
说明
_sentinelNone没有使用的参数
labelsTensortype, shape 与 logits相同
logitsTensortype 是 float32 或者 float64
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 sigmoid_cross_entropy_with_logits.py:
示例代码:/home/ubuntu/sigmoid_cross_entropy_with_logits.py
  1. import tensorflow as tf
  2. x = tf.constant([1,2,3,4,5,6,7],dtype=tf.float64)
  3. y = tf.constant([1,1,1,0,0,1,0],dtype=tf.float64)
  4. loss = tf.nn.sigmoid_cross_entropy_with_logits(labels = y,logits = x)
  5. with tf.Session() as sess:
  6.     print (sess.run(loss))
复制代码
然后执行:
  1. cd /home/ubuntu;
  2. python sigmoid_cross_entropy_with_logits.py
复制代码
执行结果:
  1. [  3.13261688e-01   1.26928011e-01   4.85873516e-02   4.01814993e+00
  2.    5.00671535e+00   2.47568514e-03   7.00091147e+00]
复制代码
tf.truncated_normal
  1. truncated_normal(
  2.     shape,
  3.     mean=0.0,
  4.     stddev=1.0,
  5.     dtype=tf.float32,
  6.     seed=None,
  7.     name=None
  8. )
复制代码
功能说明:
产生截断正态分布随机数,取值范围为 [ mean - 2 * stddev, mean + 2 * stddev ]。
参数列表:
参数名
必选
类型
说明
shape1 维整形张量或 array输出张量的维度
mean0 维张量或数值均值
stddev0 维张量或数值标准差
dtypedtype输出类型
seed数值随机种子,若 seed 赋值,每次产生相同随机数
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 truncated_normal.py:
示例代码:/home/ubuntu/truncated_normal.py
  1. import tensorflow as tf
  2. initial = tf.truncated_normal(shape=[3,3], mean=0, stddev=1)
  3. print(tf.Session().run(initial))
复制代码
然后执行:
  1. python /home/ubuntu/truncated_normal.py
复制代码
执行结果:
将得到一个取值范围 [ -2, 2 ] 的 3 * 3 矩阵,您也可以尝试修改源代码看看输出结果有什么变化?
tf.constant
  1. constant(
  2.     value,
  3.     dtype=None,
  4.     shape=None,
  5.     name='Const',
  6.     verify_shape=False
  7. )
复制代码
功能说明:
根据 value 的值生成一个 shape 维度的常量张量
参数列表:
参数名
必选
类型
说明
value常量数值或者 list输出张量的值
dtypedtype输出张量元素类型
shape1 维整形张量或 array输出张量的维度
namestring张量名称
verify_shapeBoolean检测 shape 是否和 value 的 shape 一致,若为 Fasle,不一致时,会用最后一个元素将 shape 补全
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 constant.py,内容可参考:
示例代码:/home/ubuntu/constant.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. import numpy as np
  4. a = tf.constant([1,2,3,4,5,6],shape=[2,3])
  5. b = tf.constant(-1,shape=[3,2])
  6. c = tf.matmul(a,b)

  7. e = tf.constant(np.arange(1,13,dtype=np.int32),shape=[2,2,3])
  8. f = tf.constant(np.arange(13,25,dtype=np.int32),shape=[2,3,2])
  9. g = tf.matmul(e,f)
  10. with tf.Session() as sess:
  11.     print (sess.run(a))
  12.     print ("##################################")
  13.     print (sess.run(b))
  14.     print ("##################################")
  15.     print (sess.run(c))
  16.     print ("##################################")
  17.     print (sess.run(e))
  18.     print ("##################################")
  19.     print (sess.run(f))
  20.     print ("##################################")
  21.     print (sess.run(g))
复制代码
然后执行:
  1. python /home/ubuntu/constant.py
复制代码
执行结果:
  1. a: 2x3 维张量;
  2. b: 3x2 维张量;
  3. c: 2x2 维张量;
  4. e: 2x2x3 维张量;
  5. f: 2x3x2 维张量;
  6. g: 2x2x2 维张量。
复制代码
tf.placeholder
  1. placeholder(
  2.     dtype,
  3.     shape=None,
  4.     name=None
  5. )
复制代码
功能说明:
是一种占位符,在执行时候需要为其提供数据
参数列表:
参数名
必选
类型
说明
dtypedtype占位符数据类型
shape1 维整形张量或 array占位符维度
namestring占位符名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 placeholder.py,内容可参考:
示例代码:/home/ubuntu/placeholder.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. import numpy as np

  4. x = tf.placeholder(tf.float32,[None,3])
  5. y = tf.matmul(x,x)
  6. with tf.Session() as sess:
  7.     rand_array = np.random.rand(3,3)
  8.     print(sess.run(y,feed_dict={x:rand_array}))
复制代码
然后执行:
  1. python /home/ubuntu/placeholder.py
复制代码
执行结果:
  1. 输出一个 3x3 的张量
复制代码
tf.nn.bias_add
  1. bias_add(
  2.     value,
  3.     bias,
  4.     data_format=None,
  5.     name=None
  6. )
复制代码
功能说明:
将偏差项 bias 加到 value 上面,可以看做是 tf.add 的一个特例,其中 bias 必须是一维的,并且维度和 value 的最后一维相同,数据类型必须和 value 相同。
参数列表:
参数名
必选
类型
说明
value张量数据类型为 float, double, int64, int32, uint8, int16, int8, complex64, or complex128
bias1 维张量维度必须和 value 最后一维维度相等
data_formatstring数据格式,支持 ' NHWC ' 和 ' NCHW '
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 bias_add.py,内容可参考:
示例代码:/home/ubuntu/bias_add.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. import numpy as np

  4. a = tf.constant([[1.0, 2.0],[1.0, 2.0],[1.0, 2.0]])
  5. b = tf.constant([2.0,1.0])
  6. c = tf.constant([1.0])
  7. sess = tf.Session()
  8. print (sess.run(tf.nn.bias_add(a, b)))
  9. #print (sess.run(tf.nn.bias_add(a,c))) error
  10. print ("##################################")
  11. print (sess.run(tf.add(a, b)))
  12. print ("##################################")
  13. print (sess.run(tf.add(a, c)))
复制代码
然后执行:
  1. python /home/ubuntu/bias_add.py
复制代码
执行结果:
3 个 3x2 维张量。您也可以尝试修改源代码看看输出结果有什么变化?
tf.reduce_mean
  1. reduce_mean(
  2.     input_tensor,
  3.     axis=None,
  4.     keep_dims=False,
  5.     name=None,
  6.     reduction_indices=None
  7. )
复制代码
功能说明:
计算张量 input_tensor 平均值
参数列表:
参数名
必选
类型
说明
input_tensor张量输入待求平均值的张量
axisNone、0、1None:全局求平均值;0:求每一列平均值;1:求每一行平均值
keep_dimsBoolean保留原来的维度(例如不会从二维矩阵降为一维向量)
namestring运算名称
reduction_indicesNone和 axis 等价,被弃用
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 reduce_mean.py,内容可参考:
示例代码:/home/ubuntu/reduce_mean.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. import numpy as np

  4. initial = [[1.,1.],[2.,2.]]
  5. x = tf.Variable(initial,dtype=tf.float32)
  6. init_op = tf.global_variables_initializer()
  7. with tf.Session() as sess:
  8.     sess.run(init_op)
  9.     print(sess.run(tf.reduce_mean(x)))
  10.     print(sess.run(tf.reduce_mean(x,0))) #Column
  11.     print(sess.run(tf.reduce_mean(x,1))) #row
复制代码
然后执行:
  1. python /home/ubuntu/reduce_mean.py
复制代码
执行结果:
  1. 1.5
  2. [ 1.5  1.5]
  3. [ 1.  2.]
复制代码
tf.squared_difference
  1. squared_difference(
  2.     x,
  3.     y,
  4.     name=None
  5. )
复制代码
功能说明:
计算张量 x、y 对应元素差平方
参数列表:
参数名
必选
类型
说明
x张量是 half, float32, float64, int32, int64, complex64, complex128 其中一种类型
y张量是 half, float32, float64, int32, int64, complex64, complex128 其中一种类型
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 squared_difference.py,内容可参考:
示例代码:/home/ubuntu/squared_difference.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. import numpy as np

  4. initial_x = [[1.,1.],[2.,2.]]
  5. x = tf.Variable(initial_x,dtype=tf.float32)
  6. initial_y = [[3.,3.],[4.,4.]]
  7. y = tf.Variable(initial_y,dtype=tf.float32)
  8. diff = tf.squared_difference(x,y)
  9. init_op = tf.global_variables_initializer()
  10. with tf.Session() as sess:
  11.     sess.run(init_op)
  12.     print(sess.run(diff))
复制代码
然后执行:
  1. python /home/ubuntu/squared_difference.py
复制代码
执行结果:
  1. [[ 4.  4.]
  2. [ 4.  4.]]
复制代码
tf.square
  1. square(
  2.     x,
  3.     name=None
  4. )
复制代码
功能说明:
计算张量对应元素平方
参数列表:
参数名
必选
类型
说明
x张量是 half, float32, float64, int32, int64, complex64, complex128 其中一种类型
namestring运算名称
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 square.py,内容可参考:
示例代码:/home/ubuntu/square.py
  1. #!/usr/bin/python
  2. import tensorflow as tf
  3. import numpy as np

  4. initial_x = [[1.,1.],[2.,2.]]
  5. x = tf.Variable(initial_x,dtype=tf.float32)
  6. x2 = tf.square(x)
  7. init_op = tf.global_variables_initializer()
  8. with tf.Session() as sess:
  9.     sess.run(init_op)
  10.     print(sess.run(x2))
复制代码
然后执行:
  1. python /home/ubuntu/square.py
复制代码
执行结果:
  1. [[ 1.  1.]
  2. [ 4.  4.]]
复制代码


2、TensorFlow 相关类理解
tf.Variable
  1. __init__(
  2.     initial_value=None,
  3.     trainable=True,
  4.     collections=None,
  5.     validate_shape=True,
  6.     caching_device=None,
  7.     name=None,
  8.     variable_def=None,
  9.     dtype=None,
  10.     expected_shape=None,
  11.     import_scope=None
  12. )
复制代码
功能说明:
维护图在执行过程中的状态信息,例如神经网络权重值的变化。
参数列表:
参数名
类型
说明
initial_value张量Variable 类的初始值,这个变量必须指定 shape 信息,否则后面 validate_shape 需设为 False
trainableBoolean是否把变量添加到 collection GraphKeys.TRAINABLE_VARIABLES 中(collection 是一种全局存储,不受变量名生存空间影响,一处保存,到处可取)
collectionsGraph collections全局存储,默认是 GraphKeys.GLOBAL_VARIABLES
validate_shapeBoolean是否允许被未知维度的 initial_value 初始化
caching_devicestring指明哪个 device 用来缓存变量
namestring变量名
dtypedtype如果被设置,初始化的值就会按照这个类型初始化
expected_shapeTensorShape要是设置了,那么初始的值会是这种维度
示例代码:
现在您可以在 /home/ubuntu 目录下创建源文件 Variable.py,内容可参考:
示例代码:/home/ubuntu/Variable.py
  1. #!/usr/bin/python

  2. import tensorflow as tf
  3. initial = tf.truncated_normal(shape=[10,10],mean=0,stddev=1)
  4. W=tf.Variable(initial)
  5. list = [[1.,1.],[2.,2.]]
  6. X = tf.Variable(list,dtype=tf.float32)
  7. init_op = tf.global_variables_initializer()
  8. with tf.Session() as sess:
  9.     sess.run(init_op)
  10.     print ("##################(1)################")
  11.     print (sess.run(W))
  12.     print ("##################(2)################")
  13.     print (sess.run(W[:2,:2]))
  14.     op = W[:2,:2].assign(22.*tf.ones((2,2)))
  15.     print ("###################(3)###############")
  16.     print (sess.run(op))
  17.     print ("###################(4)###############")
  18.     print (W.eval(sess)) #computes and returns the value of this variable
  19.     print ("####################(5)##############")
  20.     print (W.eval())  #Usage with the default session
  21.     print ("#####################(6)#############")
  22.     print (W.dtype)
  23.     print (sess.run(W.initial_value))
  24.     print (sess.run(W.op))
  25.     print (W.shape)
  26.     print ("###################(7)###############")
  27.     print (sess.run(X))
复制代码
然后执行:
  1. python /home/ubuntu/Variable.py
复制代码
3、完成实验


腾讯云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )