tensorflow1.x第一篇

tensorflow1.x 第一篇


人工智能大牛,机器学习概念,张量概念,计算图概念,网络参数概念,神经网络实现流程,均方误差,搭建网络八股,参数更新原理。

  • 人工智能领军人物:1.Geoffrey Hinton:多伦多大学的教授,谷歌大脑多伦多分布负责人,是人工智能领域的鼻祖,他发表了许多让神经网络得以应用的论文,激活了整个人工智能领域。他还培养了许多人工智能的大家。比如 LeCun 就是他的博士后。2.Yann LeCun:纽约大学的教授,Facebook 人工智能研究室负责人,他改进了卷积神经网路算法,使卷积神经网络具有了工程应用价值,现在卷积神经网络依旧是计算机视觉领域最有效的模型之一。3.Yoshua Bengio:蒙特利尔大学的教授,现任微软公司战略顾问,他推动了循环神经网路算法的发展,使循环神经网络得到工程应用,用循环神经网络解决了自然语言处理中的问题。

  • 机器学习是一种统计学方法,计算机利用已有数据得出某种模型,再利用此模型预测结果。在这里插入图片描述

  • 机器学习三要素:数据、算法、算力

  • 1、机器学习,就是在任务 T 上,随经验 E 的增加,效果 P 随之增加。 2、机器学习的过程是通过大量数据的输入,生成一个模型,再利用这个生成的模型,实现对结果的预测。 3、庞大的神经网络是基于神经元结构的,是输入乘以权重,再求和,再过非线性函数的过程。


  • 0 阶张量称作标量,表示一个单独的数;1 阶张量称作向量,表示一个一维数组;2 阶张量称作矩阵,表示一个二维数组
	import tensorflow as tf
	a = tf.constant([1.0,2.0])
	b = tf.constant([1.0,2.0])
	result = a+b
	print(result)
out:
	Tensor("add:0", shape=(2,), dtype=float32)
意思为 result 是一个名称为 add:0 的张量,shape=(2,)表示一维数组长度为 2,
dtype=float32 表示数据类型为浮点型,其中这三个张量构成一个计算图。
  • 计算图(Graph):搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。理解计算图概念(上文的result)
import tensorflow as tf

a = tf.constant([[1.0,2.0]])
w = tf.constant([[1.0],[2.0]])

c = tf.matmul(a,w)
with tf.Session() as sess:
    c_ = sess.run(c)
    print(c_)
out:
[[5.]]
Session是会话,是执行计算图的工具,在session中可以打印出计算图中计算节点的具体值。
  • 神经网络的参数:在初始化时需要结合激活函数来进行随机初始化,梯度爆炸的一部分原因可能是因为初始时没有选择相适应的随机函数。
import tensorflow as tf

x = tf.constant([[0.7,0.5]])
w1 = tf.Variable(tf.random_normal([2,3],stddev=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1))

a = tf.matmul(x,w1)
b = tf.matmul(a,w2)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(b))
    
    out:
    [[-1.6208937]]
    
一般会先随机生成 这些参数。生成参数的方法是让w等于tf.Variable,把生成的方式写在括号里。
tf.random_normal() 生成正态分布随机数
tf.truncated_normal() 生成去掉过大偏离点的正态分布随机数
tf.random_uniform() 生成均匀分布随机数
  • 神经网络的实现过程:1.准备数据集,提取特征作为输入喂入神经网络(在卷积神经网络中:提取特征(卷积层),神经网络(全连接层))2.搭建神经网络结构,构建前向传播过程。3.将特征数据喂给神经网络,进行反向传播迭代优化过程。4.应用。
import tensorflow as tf
#1.
x = tf.placeholder(tf.float32,shape=(1,2))

w1 = tf.Variable(tf.random_normal([2,3],stddev=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1))
#2.
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
#3.
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    c = sess.run(y,feed_dict={x:[[0.5,0.7]]})
    print(c)
out:
[[0.85307586]]
输入优先使用占位符placeholder在session中使用对应的feed_dict={}来填充数据。
  • 均方误差 MSE:求前向传播计算结果与已知答案之差的平方再求平均。
    loss_mse = tf.reduce_mean(tf.square(y_ - y))
    reduce的意义是提示编程者这个操作会降维
  • 搭建神经网络的八股:0.导入模块生成数据集1.前向传播定义输入参数输出2.反向传播:定义损失函数,反向传播方法3.生成回话训练STEPS轮
import tensorflow as tf
import numpy as np

STEPS = 5000
BATCH_SIZE = 8
SEED = 2
#生成数据集
rdm = np.random.RandomState(SEED)
X = rdm.rand(32,2)
Y_ = [[int(x0+x1<1)] for (x0,x1) in X]
#定义输入,参数,输出
x = tf.placeholder(tf.float32,[None,2])
y_ = tf.placeholder(tf.float32,[None,1])

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

a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
#定义反向传播
loss_mse = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)
#开始训练
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(STEPS):
        start = (i*BATCH_SIZE)%32
        end = start+BATCH_SIZE
        sess.run(train_step,feed_dict={x:X[start:end],y_:Y_[start:end]})
        if i % 500==0:
            loss_mse_dis = sess.run(loss_mse,feed_dict={x:X,y_:Y_})
            print("After {}steps,loss:{}".format(i,loss_mse_dis))
out:
After 0steps,loss:4.749453544616699
After 500steps,loss:0.47963640093803406
After 1000steps,loss:0.46503889560699463
After 1500steps,loss:0.45838433504104614
After 2000steps,loss:0.4539138078689575
After 2500steps,loss:0.45081743597984314
After 3000steps,loss:0.44862183928489685
After 3500steps,loss:0.4470345973968506
After 4000steps,loss:0.4458688497543335
After 4500steps,loss:0.4450009763240814
  • 参数更新(原始的梯度下降)过程:
    原始的梯度下降
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值