该系列主要是《Tensorflow 实战Google深度学习框架 》阅读笔记;有了Cookbook的热身后,以这本书作为基础形成个人知识体系。

Ref: [Tensorflow] Cookbook - The Tensorflow Way


第一章,简介(略)

第二章,安装(仅记录个别要点)

Protocol buffer

Bazel, similar with Makefile for complile.

Install steps:

  (1) Docker

  (2) Tensorflow

Source code --> pip install package --> pip install.

第三章,入门

计算图

1. 定义计算

2. 执行计算

  1. In [1]: import tensorflow as tf
  2.  
  3. In [2]: a = tf.constant([1.0, 2.0], name = "a")
  4.  
  5. In [3]: b = tf.constant([2.0, 3.0], name = "b")
  6.  
  7. In [4]: result = a+b

  8. # 必须sess才能执行,这里只是定义
  9. In [5]: result
  10. Out[5]: <tf.Tensor 'add:0' shape=(2,) dtype=float32>

系统默认了一个计算图:

  1. In [6]: print(a.graph is tf.get_default_graph())
  2. True
  3.  
  4. In [7]: print(b.graph is tf.get_default_graph())
  5. True

两个图,两个name = 'v'的variable;但这里不冲突。

  1. import tensorflow as tf
  2.  
  3. g1 = tf.Graph()  #自定了一个图
  4. with g1.as_default():  #设置为当前要操作的
  5. v = tf.get_variable("v", [1])
  6.  
  7. g2 = tf.Graph()
  8. with g2.as_default():
  9. v = tf.get_variable("v", [1])

  10. # 定义结构图
    # 执行结构图
  11. with tf.Session(graph = g1) as sess:  # 执行图g1
  12. tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
  13. print(sess.run(tf.get_variable("v")))
  14.  
  15. with tf.Session(graph = g2) as sess:  # 执行图g2
  16. tf.global_variables_initializer().run()
  17. with tf.variable_scope("", reuse=True):
  18. print(sess.run(tf.get_variable("v")))
  19.  
  20. 通过图,指定运行图的设备
    g = tf.Graph()
    with g.device('/gpu:0'):
      result = a + b

集合

  -- 将资源加入集合

张量

  -- 仅保存了如何得到这些数字的计算过程

  1. import tensorflow as tf
  2. a = tf.constant([1.0, 2.0], name="a")
  3. b = tf.constant([2.0, 3.0], name="b")
  4. result = a + b
  5. print(result)
  6.  
  7. sess = tf.InteractiveSession()
  8. print(result.eval())
  9. sess.close()

得到的是:对结果的一个引用。【一个张量的结构】

【add:0 表示result这个张量是计算节点“add"输出的第一个结果】

【2, 表示是一维数组,长度为2】

  1. Tensor("add:0", shape=(2,), dtype=float32)
  2. [ 3. 5.]

基本概念:

零阶张量:scalar

一阶张量:vector

二阶张量:matrix

三阶张量:super matrix :-p

会话

将所有计算放在“with"的内部:

  1. with tf.Session() as sess:
  2. print(sess.run(result))

NB: Graph有默认的,自动生成;但session没有!The sess you create will be added autometically into this default Graph.

设置默认会话:【sess过程中有一次with就可以了】

  1. sess = tf.Session()
  2. with sess.as_default():
  3. print(result.eval())
  4.  
  5. Output:
    [ 3. 7.]

指定为默认会话的意义是什么?获取张量取值更加方便。

  1. sess = tf.Session()
  2. with sess.as_default():  # 注册的过程
  3. print(result.eval())

通过InteractiveSession自动将会话注册为默认会话

  1. sess = tf.InteractiveSession ()  # create session即同时注册
  2. print(result.eval())
  3. sess.close()  # 但岂不是多了一行代码?方便在了哪里,不解

会话配置的修改

  1. config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
  2. sess1 = tf.InteractiveSession(config=config)
  3. sess2 = tf.Session(config=config)

矩阵计算

  1. a = tf.matmul(x, w1)  # 已经默认考虑了转置问题,故比较方便

变量

【cookbook有详细实例】

  1. w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))

NB:seed的意义在于:保证每次运行得到的结果是一样的。

获得shape:

  1. w1.get_shape()
  2. Out[51]: TensorShape([Dimension(2), Dimension(3)])
  3.  
  4. w1.get_shape()[0]
  5. Out[52]: Dimension(2)
  6.  
  7. w1.get_shape()[1]
  8. Out[53]: Dimension(3)
  • 通过“拷贝”初始化
  1. w2 = tf.Variable(w1.initialized_value())  # 直接拷贝别人家的初始值
  2. w3 = tf.Variable(w1.initialized_value() * 2.0)
  • 通过"随机数"初始化

  • 通过"常数"初始化

变量初始化的执行

通过 tf.global_variables_initializer() 真正执行对变量初始化的设定。

  1. w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
  2. w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
  3.  
  4. x = tf.placeholder(tf.float32, shape=(1, 2), name="input")  // 没有初始值,但最好给出自身“容器”的大小,将来给feed瞧
  5.  
  6. a = tf.matmul(x, w1)
  7. y = tf.matmul(a, w2)
  8.  
  9. sess = tf.Session()
  10.  
  11. init_op = tf.global_variables_initializer()
  12. sess.run(init_op)
  13.  
  14. print(sess.run(y, feed_dict={x: [[0.7,0.9]]}))

例如:w1在Graph中的解析

Assign

变量维度的改变,但基本不用,也不会给自己找麻烦。

  1. tf.assign( w1, w2, validate_shape=False )

第四章,深层神经网络

激活函数让神经网络不再线性化。

实现代码,可见极其简洁:

  1. a = tf.nn.relu(tf.matmul(x, w1) + biases1)
  2. y = tf.nn.relu(tf.matmul(a, w2) + biases2)
  • Cross-entropy

避免log值过小的方式:clip_by_value

  1. cross_entropy = -tf.reduce_mean(t * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

Before cross-entropy, we always use softmax: X * W -->  softmax --> cross-entropy

  1. softmax_cross_entropy_with_logits(
  2. _sentinel=None,
  3. labels =None,
  4. logits =None,
  5. dim =-1,
  6. name =None
  7. )
  8.  
  9. sparse_softmax_cross_entropy_with_logits(
  10. _sentinel=None,
  11. labels =None,
  12. logits =None,
  13. name =None
  14. )

如果只是关心前向传播的预测值,那么其实只关心logits部分,然后需要取出最大概率的那个label。

  • MSE - L2 loss

NB: Classification by xentropy; For regression, we use MSE as following:

  1. mse = tf.reduce_mean(tf.square(y_ - y))

Loss最终的归宿:

  1. train_step = tf.train.AdamOptimizer(0.001).minimize(loss)

tensorflow api for LOSS:

absolute_difference(...): Adds an Absolute Difference loss to the training procedure.

add_loss(...): Adds a externally defined loss to the collection of losses.

compute_weighted_loss(...): Computes the weighted loss.

cosine_distance(...): Adds a cosine-distance loss to the training procedure.

get_losses(...): Gets the list of losses from the loss_collection.

get_regularization_loss(...): Gets the total regularization loss.

get_regularization_losses(...): Gets the list of regularization losses.

get_total_loss(...): Returns a tensor whose value represents the total loss.

hinge_loss(...): Adds a hinge loss to the training procedure.

huber_loss(...): Adds a Huber Loss term to the training procedure.

log_loss(...): Adds a Log Loss term to the training procedure.

mean_pairwise_squared_error(...): Adds a pairwise-errors-squared loss to the training procedure.

mean_squared_error(...): Adds a Sum-of-Squares loss to the training procedure.

sigmoid_cross_entropy(...): Creates a cross-entropy loss using tf.nn.sigmoid_cross_entropy_with_logits.

softmax_cross_entropy(...): Creates a cross-entropy loss using tf.nn.softmax_cross_entropy_with_logits.

sparse_softmax_cross_entropy(...): Cross-entropy loss using tf.nn.sparse_softmax_cross_entropy_with_logits.

  • 高级点的问题

CNN--两个Loss层计算的数值问题 (overflow...)

  From: https://zhuanlan.zhihu.com/p/22260935

在计算Loss部分是可能出现的一些小问题以及现在的解决方法。

其实也是仔细阅读下Caffe代码中有关Softmax loss和sigmoid cross entropy loss两个部分的真实计算方法。

  • exp这个函数实在是有毒

指数函数是一个很容易让数值爆炸的函数,那么输入大概到多少会溢出呢?蛋疼的我还是做了一个实验:

  1. np.exp()
  2. 8.2184074615549724e+307

出现如下问题:

  1. def naive_softmax(x):
  2. y = np.exp(x)
  3. return y / np.sum(y)
  1. #b取值很大,部分值大于了709
  2. b = np.random.rand(10) * 1000
  3. print b
  4. print naive_softmax(b)
  1. [ 497.46732916 227.75385779 537.82669096 787.54950048 663.13861524
  2. 224.69389572 958.39441314 139.09633232 381.35034548 604.08586655]
  3. [ 0. 0. 0. nan 0. 0. nan 0. 0. 0.]

那么如何解决呢?我们只要给每个数字除以一个大数,保证它不溢出,问题不就解决了?

老司机给出的方案是找出输入数据中最大的数,然后除以e的最大数次幂,相当于下面的代码:

  1. def high_level_softmax(x):
  2. max_val = np.max(x)
  3. x -= max_val
  4. return naive_softmax(x)

However,scale太大,个别值太小了!

  1. b = np.random.rand(10) * 1000
  2. print b
  3. print high_level_softmax(b)
  4.  
  5. [ 903.27437996 260.68316085 22.31677464 544.80611744 506.26848644
  6. 698.38019158 833.72024087 200.55675076 924.07740602 909.39841128]
  7.  
  8. [ 9.23337324e-010 7.79004225e-289 0.00000000e+000
  9. 1.92562645e-165 3.53094986e-182 9.57072864e-099
  10. 5.73299537e-040 6.01134555e-315 9.99999577e-001
  11. 4.21690097e-007]

使用一点平滑的小技巧还是很有必要的,于是代码又变成:

  1. def practical_softmax(x):
  2. max_val = np.max(x)
  3. x -= max_val
  4. y = np.exp(x)
  5. y[y < 1e-20] = 1e-20
  6. return y / np.sum(y)

Result: 相当于加了个下限

  1. [ 9.23337325e-10 9.99999577e-21 9.99999577e-21 9.99999577e-21
  2. 9.99999577e-21 9.99999577e-21 9.99999577e-21 9.99999577e-21
  3. 9.99999577e-01 4.21690096e-07]

【但,貌似一个简单的封装好的 preds  = tf.nn.softmax(z),即可解决这个问题】

  • sigmoid也是中毒专业户

因为其中包含了exp,*_*b

  1. def naive_sigmoid_loss(x, t):
  2. y = 1 / (1 + np.exp(-x))
  3. return -np.sum(t * np.log(y) + (1 - t) * np.log(1 - y)) / y.shape[0] 
  1. a = np.random.rand(10)* 1000
  2. b = a > 500
  3. print a
  4. print b
  5. print naive_sigmoid_loss(a,b)
  1. [ 63.20798359 958.94378279 250.75385942 895.49371345 965.62635077
  2. 81.1217712 423.36466749 532.20604694 333.45425951 185.72621262]
  3. [False True False True True False False True False False]
  4. nan

改进方法:

对应代码:

  1. def high_level_sigmoid_loss(x, t):
  2. first = (t - (x > 0)) * x
  3. second = np.log(1 + np.exp(x - 2 * x * (x > 0)))
  4. return -np.sum(first - second) / x.shape[0]
  1. a = np.random.rand(10)* 1000 - 500
  2. b = a > 0
  3. print a
  4. print b
  5. print high_level_sigmoid_loss(a,b)
  6.  
  7. [-173.48716596 462.06216262 -417.78666769 6.10480948 340.13986055
  8. 23.64615392 256.33358957 -332.46689674 416.88593348 -246.51402684]
  9. [False True False True True True True False True False]
  10. 0.000222961919658

NN的进一步优化问题

  • 学习率的设置

没有label,求得的值 y = x2 就直接是lost function。

对于learning_rate = 1的理解:

导数是2x,故w变化是10,这就是震荡的原因。

  1. import tensorflow as tf
  2. TRAINING_STEPS =
  3. LEARNING_RATE = 1   #尝试改变学习率,查看收敛效果
  4.  
  5. # x here denotes w
  6. x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
  7. y = tf.square(x)  # y = x2
  8.  
  9. train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y)
  10.  
  11. with tf.Session() as sess:
  12. sess.run(tf.global_variables_initializer())
  13. for i in range(TRAINING_STEPS):
  14. sess.run(train_op)
  15. x_value = sess.run(x)
  16. print "After %s iteration(s): x%s is %f."% (i+1, i+1, x_value)

指数递减学习率

  1. TRAINING_STEPS = 100
  2. global_step = tf.Variable(0)
  3. LEARNING_RATE = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)
  4. # 初始学习率
    # 没1次训练学习率衰减为原来的0.96
  5. x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
  6. y = tf.square(x)
  7. train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y, global_step=global_step)
  8.  
  9. with tf.Session() as sess:
  10. sess.run(tf.global_variables_initializer())
  11. for i in range(TRAINING_STEPS):
  12. sess.run(train_op)
  13. if i % 10 == 0:
  14. LEARNING_RATE_value = sess.run(LEARNING_RATE)
  15. x_value = sess.run(x)
  16. print("After %s iteration(s): x%s is %f, learning rate is %f."% (i+1, i+1, x_value, LEARNING_RATE_value))

  • 过拟合问题

画出这两个图,感觉很好玩的样子,怎么画呢?

  1. import tensorflow as tf
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4.  
  5. data = []
  6. label = []
  7. np.random.seed(0)

# 以原点为圆心,半径为1的圆把散点划分成红蓝两部分,并加入随机噪音。

剩下就是给data, label对儿不断添加一对对儿数据的过程。

  1. for i in range(150):
  2. x1 = np.random.uniform(-1,1)
  3. x2 = np.random.uniform(0,2)
  4. if x1**2 + x2**2 <= 1:
  5. data.append([np.random.normal(x1, 0.1),np.random.normal(x2,0.1)])
  6. label.append(0)
  7. else:
  8. data.append([np.random.normal(x1, 0.1), np.random.normal(x2, 0.1)])
  9. label.append(1)
  10.  
  11. data = np.hstack(data ).reshape(-1,2)  # 这里的2对应了二维空间的x,y两个坐标值
  12. label = np.hstack(label).reshape(-1,1)
  13. plt.scatter(data[:,0], data[:,1], c=label,
  14. cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
  15. plt.show()

np.hstack 用法

  1. >>> a = np.array((1,2,3))
  2. >>> b = np.array((2,3,4))
  3. >>> np.hstack((a,b))
  4. array([1, 2, 3, 2, 3, 4])
  5. >>> a = np.array([[1],[2],[3]])
  6. >>> b = np.array([[2],[3],[4]])
  7. >>> np.hstack((a,b))
  8. array([[1, 2],
  9. [2, 3],
  10. [3, 4]])

np.reshape 用法

  1. a=array([[1,2,3],[4,5,6]])
  2. reshape(a, 6)
  3.  
  4. Out[202]:
    array([1, 2, 3, 4, 5, 6])

NB:这里的 ‘-1’

  1. reshape(a, (3, -1)) #为指定的值将被推断出为2

Out[204]:
array([[1, 2],
[3, 4],
[5, 6]])

循环生成网络结构,好巧妙的技巧!

  1. x = tf.placeholder(tf.float32, shape=(None, 2))
  2. y_ = tf.placeholder(tf.float32, shape=(None, 1))
  3. sample_size = len(data)
  4.  
  5. # 每层节点的个数:比较有意思的构建网络方法
  6. layer_dimension = [2,10,5,3,1]
  7. n_layers = len(layer_dimension)
  8.  
  9. cur_layer = x
  10. # 循环生成网络结构
  11. for i in range(1, n_layers):  # NB:这是是从2nd layer开始,也就是第一个out_layer
  12. in_dimension = layer_dimension[i-1]
    out_dimension = layer_dimension[i]
  13. weight = get_weight([in_dimension, out_dimension], 0.003)  # 正则参数 ---->
  14. bias = tf.Variable(tf.constant(0.1, shape=[out_dimension]))
    cur_layer = tf.nn.elu(tf.matmul(cur_layer, weight) + bias)
  15.  
  16. y= cur_layer
  17. # 损失函数的定义。
    # 这里只需要计算"刻画模型在训练数据集上的表现"的损失函数
  18. mse_loss = tf.reduce_sum(tf.pow(y_ - y, 2)) / sample_size
  19. tf.add_to_collection('losses', mse_loss)  # 还没有正则的loss
  20.  
  21. # 得到了最终的损失函数 - 同时也结合了get_weight中的add_to_collection
  22. loss = tf.add_n(tf.get_collection('losses'))

tf.get_collection('losses') 的内容如下:

  1. [<tf.Tensor 'l2_regularizer:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_1:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_2:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_3:0' shape=() dtype=float32>, <tf.Tensor 'truediv:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_4:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_5:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_6:0' shape=() dtype=float32>, <tf.Tensor 'l2_regularizer_7:0' shape=() dtype=float32>, <tf.Tensor 'truediv_1:0' shape=() dtype=float32>]

将“L2正则后的权重变量var”加入到集合中:tf.add_to_collecdtion。

  1. def get_weight(shape, lambda1):
  2. var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)
  3. tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var))
  4. return var

训练不带正则项的损失函数mse_loss

  1. # 定义训练的目标函数mse_loss,训练次数及训练模型
  2. train_op = tf.train.AdamOptimizer(0.001).minimize(mse_loss)
  3. TRAINING_STEPS = 40000
  4.  
  5. with tf.Session() as sess:
  6. tf.global_variables_initializer().run()
  7. for i in range(TRAINING_STEPS):
  8. sess.run(train_op, feed_dict={x: data, y_: label})
  9. if i % 2000 == 0:
  10. print("After %d steps, mse_loss: %f" % (i,sess.run(mse_loss, feed_dict={x: data, y_: label})))

  11. # 画出训练后的分割曲线 - 很有意思!
    # 1. 画网格
  12. xx, yy = np.mgrid[-1.2:1.2:.01, -0.2:2.2:.01]
  13. grid = np.c_[xx.ravel(), yy.ravel()]
    # 2.
  14. probs = sess.run(y, feed_dict={x:grid})  # y在这里代表了最后一层
  15. probs = probs.reshape(xx.shape)
  16.  
  17. plt.scatter(data[:,0], data[:,1], c=label, cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
  18. plt.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.1)
  19. plt.show()

Ref: http://blog.csdn.net/u013534498/article/details/51399035

这篇博文我喜欢,数据表现也需要开专题学习。

np.mgrid用法

  1. np.mgrid[-1.2:1.2:.01, -0.2:2.2:.01]
    参数格式:行,列,间隙
  2. Out[217]:
  3. array([[[-1.2 , -1.2 , -1.2 , ..., -1.2 , -1.2 , -1.2 ],
  4. [-1.19, -1.19, -1.19, ..., -1.19, -1.19, -1.19],
  5. [-1.18, -1.18, -1.18, ..., -1.18, -1.18, -1.18],
  6. ...,
  7. [ 1.17, 1.17, 1.17, ..., 1.17, 1.17, 1.17],
  8. [ 1.18, 1.18, 1.18, ..., 1.18, 1.18, 1.18],
  9. [ 1.19, 1.19, 1.19, ..., 1.19, 1.19, 1.19]],
  10.  
  11. [[-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ],
  12. [-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ],
  13. [-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ],
  14. ...,
  15. [-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ],
  16. [-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ],
  17. [-0.2 , -0.19, -0.18, ..., 2.18, 2.19, 2.2 ]]])
  • 滑动平均模型

衰减率:模型更新的速度

变量 --> 影子变量 (share init)

影子变量 = 衰减率*影子变量+(1-衰减率)*变量

衰减率越大,变量更新越快!

decay总体上不希望更新太快,但前期希望更新快些的衰减率设置办法:

查看不同迭代中变量取值的变化

  1. import tensorflow as tf
  2.  
  3. v1 = tf.Variable(0, dtype=tf.float32)
  4. step = tf.Variable(0, trainable=False)
  5. ema = tf.train.ExponentialMovingAverage(0.99, step) # step:控制衰减率的变量
  6. maintain_averages_op = ema.apply([v1]) # 更新列表中的变量
  7.  
  8. with tf.Session() as sess:
  9.  
  10. # 初始化
  11. init_op = tf.global_variables_initializer()
  12. sess.run(init_op)
  13. print(sess.run([v1, ema.average(v1)]))
  1. [0.0, 0.0]
  1. # 更新变量v1的取值
  2. sess.run(tf.assign(v1, 5))
  3. sess.run(maintain_averages_op)
  4. print(sess.run([v1, ema.average(v1)]))
  1. [5.0, 4.5]
  1. # 更新step和v1的取值
  2. sess.run(tf.assign(step, 10000))
  3. sess.run(tf.assign(v1, 10))
  4. sess.run(maintain_averages_op)
  5. print(sess.run([v1, ema.average(v1)]))
  1. [10.0, 4.5549998]
  1. # 更新一次v1的滑动平均值
  2. sess.run(maintain_averages_op)
  3. print(sess.run([v1, ema.average(v1)]))
  1. [10.0, 4.6094499]

还是不太了解其目的:难道就是为了ema.average(v1) 这个返回结果?


疑难杂症

版本查看:

  1. python -c 'import tensorflow as tf; print(tf.__version__)' # for Python 2
  2. python3 -c 'import tensorflow as tf; print(tf.__version__)' # for Python 3

安装升级:

  1. unsw@unsw-UX303UB$ pip3 install --upgrade tensorflow
  2. Requirement already up-to-date: tensorflow in /usr/local/anaconda3/lib/python3.5/site-packages
  3. Requirement already up-to-date: six>=1.10.0 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow)
  4. Requirement already up-to-date: tensorflow-tensorboard<0.2.0,>=0.1.0 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow)
  5. Requirement already up-to-date: wheel>=0.26 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow)
  6. Requirement already up-to-date: protobuf>=3.3.0 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow)
  7. Requirement already up-to-date: numpy>=1.11.0 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow)
  8. Requirement already up-to-date: werkzeug>=0.11.10 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow-tensorboard<0.2.0,>=0.1.0->tensorflow)
  9. Requirement already up-to-date: markdown>=2.6.8 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow-tensorboard<0.2.0,>=0.1.0->tensorflow)
  10. Requirement already up-to-date: bleach==1.5.0 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow-tensorboard<0.2.0,>=0.1.0->tensorflow)
  11. Requirement already up-to-date: html5lib==0.9999999 in /usr/local/anaconda3/lib/python3.5/site-packages (from tensorflow-tensorboard<0.2.0,>=0.1.0->tensorflow)
  12. Requirement already up-to-date: setuptools in /usr/local/anaconda3/lib/python3.5/site-packages (from protobuf>=3.3.0->tensorflow)
  13.  
  14. unsw@unsw-UX303UB$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
  15. 1.3.0

忽略警告:https://github.com/tensorflow/tensorflow/issues/7778

  1. import os
  2. os.environ['TF_CPP_MIN_LOG_LEVEL']=''

[Tensorflow] Practice - The Tensorflow Way的更多相关文章

  1. 移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

    承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化 ...

  2. 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介

    平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...

  3. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  4. TensorFlow+Keras 03 TensorFlow 与 Keras 介绍

    1 TensorFlow 架构图 1.1 处理器 TensorFlow 可以在CPU.GPU.TPU中执行 1.2 平台 TensorFlow 具备跨平台能力,Windows .Linux.Andro ...

  5. [Tensorflow] **Android Meets TensorFlow

    TensorFlow Dev Summit 2017 From: Android Meets TensorFlow: How to Accelerate Your App with AI (Googl ...

  6. 使用TensorFlow Serving优化TensorFlow模型

    使用TensorFlow Serving优化TensorFlow模型 https://www.tensorflowers.cn/t/7464 https://mp.weixin.qq.com/s/qO ...

  7. TensorFlow应用实战 | TensorFlow基础知识

    挺长的~超出估计值了~预计阅读时间20分钟. 从helloworld开始 mkdir 1.helloworld cd 1.helloworldvim helloworld.py 代码: # -*- c ...

  8. tensorflow兼容处理 tensorflow.compat.v1

    https://www.wandouip.com/t5i183316/ 引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很 ...

  9. 最简单的 TensorFlow 代码,TensorFlow Hello World 。

    # -*- coding:utf-8 -*- from __future__ import print_function ''' HelloWorld example using TensorFlow ...

随机推荐

  1. Java多线程:CAS与java.util.concurrent.atomic

    锁的几种概念 悲观锁 总是假设最坏的情况,每次获取数据都认为别人会修改,所以拿数据时会上锁,一直到释放锁不允许其他线程修改数据.Java中如synchronized和reentrantLock就是这种 ...

  2. JAVA中String类常用方法 I

    String类常用方法有: int length() -– 返回当前字符串的长度 int indexOf(int ch) -– 查找ch字符在该字符串中第一次出现的位置 int indexOf(Str ...

  3. sqlplus 执行 sql 文件

    SQL>START file_name or SQL>@ file_name 1 .sqlplus system/system@srv  2. sql>@c:\a.sql  (执行此 ...

  4. windows SVN 服务器搭建

    一.SVN服务器搭建和使用  1.     首先来下载和搭建SVN服务器,下载地址如下: http://subversion.apache.org/packages.html#windows,进入网址 ...

  5. Python之道(一)之安装Python

    "Python之道"首先介绍一下在windows系统下怎样安装Python开发环境. (1)下载MSI安装文件 进入网址www.python.org,点击Downloads进入下载 ...

  6. ASP.NET MVC 4 简介

    介绍 使用Visual Studio 2010开发的话,首先需要安装MVC4,可以参考另一篇文章 进行安装. ASP.NET MVC 运行流程 (Clinet) Http Request 客户端发起 ...

  7. 五种常见的ASP.NET安全缺陷

    保证应用程序的安全应当从编写第一行代码的时候开始做起,原因很简单,随着应用规模的发展,修补安全漏洞所需的代价也随之快速增长.根据IBM的系统科学协会(SystemsSciencesInstitute) ...

  8. SQL SERVER 行列转换(动态)

    行转列测试数据: --测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Name] nvar ...

  9. 阿里云 ssh 登陆请使用(公)ip

    一直以为要要登陆使用的是私有的ip,最后才发现是使用共有ip, 如图 47.52.69.151 > ssh root@47.52.69.151 > 输入密码

  10. Java线上问题排查思路及Linux常用问题分析命令学习

    前言 之前线上有过一两次OOM的问题,但是每次定位问题都有点手足无措的感觉,刚好利用星期天,以测试环境为模版来学习一下Linux常用的几个排查问题的命令. 也可以帮助自己在以后的工作中快速的排查线上问 ...