【Tensorflow】相关面试题整理(转)
·
-
用tensorflow实现线性回归,主要考察的是一个tf的一个实现思路。(贝壳)
-
import tensorflow
as tf
-
import numpy
as np
-
import matplotlib.pyplot
as plt
-
-
#使用numpy生成200个随机点
-
x_data=np.linspace(
-0.5,
0.5,
200)[:,np.newaxis]
-
noise=np.random.normal(
0,
0.02,x_data.shape)
-
y_data=np.square(x_data)+noise
-
-
#定义两个placeholder存放输入数据
-
x=tf.placeholder(tf.float32,[
None,
1])
-
y=tf.placeholder(tf.float32,[
None,
1])
-
-
#定义神经网络中间层
-
Weights_L1=tf.Variable(tf.random_normal([
1,
10]))
-
biases_L1=tf.Variable(tf.zeros([
1,
10]))
#加入偏置项
-
Wx_plus_b_L1=tf.matmul(x,Weights_L1)+biases_L1
-
L1=tf.nn.tanh(Wx_plus_b_L1)
#加入激活函数
-
-
#定义神经网络输出层
-
Weights_L2=tf.Variable(tf.random_normal([
10,
1]))
-
biases_L2=tf.Variable(tf.zeros([
1,
1]))
#加入偏置项
-
Wx_plus_b_L2=tf.matmul(L1,Weights_L2)+biases_L2
-
prediction=tf.nn.tanh(Wx_plus_b_L2)
#加入激活函数
-
-
#定义损失函数(均方差函数)
-
loss=tf.reduce_mean(tf.square(y-prediction))
-
#定义反向传播算法(使用梯度下降算法训练)
-
train_step=tf.train.GradientDescentOptimizer(
0.1).minimize(loss)
-
-
with tf.Session()
as sess:
-
#变量初始化
-
sess.run(tf.global_variables_initializer())
-
#训练2000次
-
for i
in range(
2000):
-
sess.run(train_step,feed_dict={x:x_data,y:y_data})
-
-
#获得预测值
-
prediction_value=sess.run(prediction,feed_dict={x:x_data})
-
-
#画图
-
plt.figure()
-
plt.scatter(x_data,y_data)
#散点是真实值
-
plt.plot(x_data,prediction_value,
'r-',lw=
5)
#曲线是预测值
-
plt.show()
-
请简要介绍下Tensorflow的计算图。(阿里)
Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
- tf前向传播
-
import tensorflow
as tf
-
import os
-
-
os.environ[
'TF_CPP_MIN_LOG_LEVEL'] =
'2'
-
-
# 声明w1、w2两个变量,这里还通过seed参数设定了随机种子,
-
# 这样可以保证每次运行得到的结果是一样的。
-
w1 = tf.Variable(tf.random_normal((
2,
3), stddev=
1, seed=
1))
-
w2 = tf.Variable(tf.random_normal((
3,
1), stddev=
1, seed=
1))
-
-
# 暂时将输入的特征向量定义为一个常量,注意这里x是一个1*2的矩阵。
-
x = tf.constant([[
0.7,
0.9]])
-
-
# 通过前向传播算法获得神经网络输出。
-
a = tf.matmul(x, w1)
-
y = tf.matmul(a, w2)
-
-
sess = tf.Session()
-
# 这里不能直接通过sess.run(y)来获取y的取值,
-
# 因为w1和w2都还没有运行初始化过程,以下两行分别初始化了w1和w2两个变量。
-
sess.run(w1.initializer)
-
sess.run(w2.initializer)
-
# 输出[[3.95757794]]
-
print(sess.run(y))
-
sess.close()
tf.random_normal([2, 3], stddev=1) 会产生一个 2×3 的矩阵,矩阵中的元素是均值为 0,标准差为 1 的随机数,tf.random_normal 函数可以通过参数 mean 来指定平均值,在没有指定时默认为 0。
tensorflow(六)训练分类自己的图片(CNN超详细入门版)
-
tensorflow如何实现并行,梯度更新是同步还是异步,同步异步的优缺点
背景:先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder。那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢?——梯度异步更新。
TensorFlow多GPU并行的实现(这个完全解决了上面的问题)
梯度更新可以同步,也可以异步。
同步/异步优劣比较
- 同步模式解决了异步模式中存在的参数更新问题,然而同步模式的效率却低于异步模式
- 在同步模式下,每一轮迭代都需要设备统一开始、统一结束
- 如果设备的运行速度不一致,那么每一轮训练都需要等待最慢的设备结束才能开始更新参数,于是很多时间将被花在等待上
- 虽然理论上异步模式存在缺陷,但是因为训练深度学习模型时,使用的随机梯度下降本身就是梯度下降的一个近似解法,而且即使是梯度下降也无法保证达到全局最优
- 所以在实际应用中,相同时间内,使用异步模式训练的模型不一定比同步模式差
-
tensorflow的分布式版本
更多推荐
已为社区贡献5条内容
所有评论(0)