赞
踩
- 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中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

- 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超详细入门版)
背景:先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder。那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢?——梯度异步更新。
TensorFlow多GPU并行的实现(这个完全解决了上面的问题)
梯度更新可以同步,也可以异步。
同步/异步优劣比较
- 同步模式解决了异步模式中存在的参数更新问题,然而同步模式的效率却低于异步模式
- 在同步模式下,每一轮迭代都需要设备统一开始、统一结束
- 如果设备的运行速度不一致,那么每一轮训练都需要等待最慢的设备结束才能开始更新参数,于是很多时间将被花在等待上
- 虽然理论上异步模式存在缺陷,但是因为训练深度学习模型时,使用的随机梯度下降本身就是梯度下降的一个近似解法,而且即使是梯度下降也无法保证达到全局最优
- 所以在实际应用中,相同时间内,使用异步模式训练的模型不一定比同步模式差
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。