【Tensorflow】相关面试题整理(转)

  • 用tensorflow实现线性回归,主要考察的是一个tf的一个实现思路。(贝壳)


    
    
  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. #使用numpy生成200个随机点
  5. x_data=np.linspace( -0.5, 0.5, 200)[:,np.newaxis]
  6. noise=np.random.normal( 0, 0.02,x_data.shape)
  7. y_data=np.square(x_data)+noise
  8. #定义两个placeholder存放输入数据
  9. x=tf.placeholder(tf.float32,[ None, 1])
  10. y=tf.placeholder(tf.float32,[ None, 1])
  11. #定义神经网络中间层
  12. Weights_L1=tf.Variable(tf.random_normal([ 1, 10]))
  13. biases_L1=tf.Variable(tf.zeros([ 1, 10])) #加入偏置项
  14. Wx_plus_b_L1=tf.matmul(x,Weights_L1)+biases_L1
  15. L1=tf.nn.tanh(Wx_plus_b_L1) #加入激活函数
  16. #定义神经网络输出层
  17. Weights_L2=tf.Variable(tf.random_normal([ 10, 1]))
  18. biases_L2=tf.Variable(tf.zeros([ 1, 1])) #加入偏置项
  19. Wx_plus_b_L2=tf.matmul(L1,Weights_L2)+biases_L2
  20. prediction=tf.nn.tanh(Wx_plus_b_L2) #加入激活函数
  21. #定义损失函数(均方差函数)
  22. loss=tf.reduce_mean(tf.square(y-prediction))
  23. #定义反向传播算法(使用梯度下降算法训练)
  24. train_step=tf.train.GradientDescentOptimizer( 0.1).minimize(loss)
  25. with tf.Session() as sess:
  26. #变量初始化
  27. sess.run(tf.global_variables_initializer())
  28. #训练2000次
  29. for i in range( 2000):
  30. sess.run(train_step,feed_dict={x:x_data,y:y_data})
  31. #获得预测值
  32. prediction_value=sess.run(prediction,feed_dict={x:x_data})
  33. #画图
  34. plt.figure()
  35. plt.scatter(x_data,y_data) #散点是真实值
  36. plt.plot(x_data,prediction_value, 'r-',lw= 5) #曲线是预测值
  37. plt.show()

TensorFlow——实现线性回归算法

TensorFlow——实现简单的线性回归

  • 请简要介绍下Tensorflow的计算图。(阿里)

Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

  • tf前向传播


  
  
  1. import tensorflow as tf
  2. import os
  3. os.environ[ 'TF_CPP_MIN_LOG_LEVEL'] = '2'
  4. # 声明w1、w2两个变量,这里还通过seed参数设定了随机种子,
  5. # 这样可以保证每次运行得到的结果是一样的。
  6. w1 = tf.Variable(tf.random_normal(( 2, 3), stddev= 1, seed= 1))
  7. w2 = tf.Variable(tf.random_normal(( 3, 1), stddev= 1, seed= 1))
  8. # 暂时将输入的特征向量定义为一个常量,注意这里x是一个1*2的矩阵。
  9. x = tf.constant([[ 0.7, 0.9]])
  10. # 通过前向传播算法获得神经网络输出。
  11. a = tf.matmul(x, w1)
  12. y = tf.matmul(a, w2)
  13. sess = tf.Session()
  14. # 这里不能直接通过sess.run(y)来获取y的取值,
  15. # 因为w1和w2都还没有运行初始化过程,以下两行分别初始化了w1和w2两个变量。
  16. sess.run(w1.initializer)
  17. sess.run(w2.initializer)
  18. # 输出[[3.95757794]]
  19. print(sess.run(y))
  20. sess.close()

tf.random_normal([2, 3], stddev=1) 会产生一个 2×3 的矩阵,矩阵中的元素是均值为 0,标准差为 1 的随机数,tf.random_normal 函数可以通过参数 mean 来指定平均值,在没有指定时默认为 0。

ï¼ä¸ï¼Tensorflowå®ç°ååä¼ æ­ä»£ç è§£æ

Tensorflow实战-前向传播算法

tensorflow(六)训练分类自己的图片(CNN超详细入门版)

  • tensorflow如何实现并行,梯度更新是同步还是异步,同步异步的优缺点

Tensorflow的梯度异步更新

背景:先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder。那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢?——梯度异步更新。

TensorFlow多GPU并行的实现(这个完全解决了上面的问题)

梯度更新可以同步,也可以异步。

同步/异步优劣比较

  • 同步模式解决了异步模式中存在的参数更新问题,然而同步模式的效率却低于异步模式
  • 在同步模式下,每一轮迭代都需要设备统一开始、统一结束
  • 如果设备的运行速度不一致,那么每一轮训练都需要等待最慢的设备结束才能开始更新参数,于是很多时间将被花在等待上
  • 虽然理论上异步模式存在缺陷,但是因为训练深度学习模型时,使用的随机梯度下降本身就是梯度下降的一个近似解法,而且即使是梯度下降也无法保证达到全局最优
  • 所以在实际应用中,相同时间内,使用异步模式训练的模型不一定比同步模式差
  • tensorflow的分布式版本

Tensorflow分布式原理理解

  • 用tensorflow实现线性回归,主要考察的是一个tf的一个实现思路。(贝壳)


  
  
  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. #使用numpy生成200个随机点
  5. x_data=np.linspace( -0.5, 0.5, 200)[:,np.newaxis]
  6. noise=np.random.normal( 0, 0.02,x_data.shape)
  7. y_data=np.square(x_data)+noise
  8. #定义两个placeholder存放输入数据
  9. x=tf.placeholder(tf.float32,[ None, 1])
  10. y=tf.placeholder(tf.float32,[ None, 1])
  11. #定义神经网络中间层
  12. Weights_L1=tf.Variable(tf.random_normal([ 1, 10]))
  13. biases_L1=tf.Variable(tf.zeros([ 1, 10])) #加入偏置项
  14. Wx_plus_b_L1=tf.matmul(x,Weights_L1)+biases_L1
  15. L1=tf.nn.tanh(Wx_plus_b_L1) #加入激活函数
  16. #定义神经网络输出层
  17. Weights_L2=tf.Variable(tf.random_normal([ 10, 1]))
  18. biases_L2=tf.Variable(tf.zeros([ 1, 1])) #加入偏置项
  19. Wx_plus_b_L2=tf.matmul(L1,Weights_L2)+biases_L2
  20. prediction=tf.nn.tanh(Wx_plus_b_L2) #加入激活函数
  21. #定义损失函数(均方差函数)
  22. loss=tf.reduce_mean(tf.square(y-prediction))
  23. #定义反向传播算法(使用梯度下降算法训练)
  24. train_step=tf.train.GradientDescentOptimizer( 0.1).minimize(loss)
  25. with tf.Session() as sess:
  26. #变量初始化
  27. sess.run(tf.global_variables_initializer())
  28. #训练2000次
  29. for i in range( 2000):
  30. sess.run(train_step,feed_dict={x:x_data,y:y_data})
  31. #获得预测值
  32. prediction_value=sess.run(prediction,feed_dict={x:x_data})
  33. #画图
  34. plt.figure()
  35. plt.scatter(x_data,y_data) #散点是真实值
  36. plt.plot(x_data,prediction_value, 'r-',lw= 5) #曲线是预测值
  37. plt.show()

猜你喜欢

转载自blog.csdn.net/monk1992/article/details/89878783
今日推荐