Tensorflow学习笔记(一)

张量(tensor)

张量:多维数组(列表)
阶:张量的维数

维数名字例子
0-D0标量 scalars=1 2 3
1-D1向量 vectorv=[1,2,3]
2-D2矩阵 matrixm=[[1,2,3],[4,5,6],[7,8,9]]
n-Dn张量 tensort=[[[…

数据类型

tf.float32 tf.int32 …

import tensorflow as tf
a = tf.constant([1.0,2.0])#定义常量
b = tf.constant([3.0,4.0])
result = a+b
print(result)

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

add是节点名,0是第0个输出,shape是维度

计算图(Graph)

搭建神经网络计算过程,只搭建不运算

x = tf.constant([[1.0,2.0]])
w = tf.constant([[3.0],[4.0]])

y = tf.matmul(x,w)
print(y)

out[2]:
Tensor("MatMul_1:0", shape=(1, 1), dtype=float32)

会话(Session)

执行计算图中的节点运算

with tf.Session() as sess:
    print(sess.run(y))
    
out[3]:
[[11.]]

参数

权重W,用变量表示,随机给初始值

w = tf.Variable(tf.random_normal([2,3], stddev=2, mean=0, seed=1))

其中tf.truncated_normal()去掉过大偏离的正态分布
tf.random_uniform()平均分布

tf.zeros 全0数组
tf.ones 全1数组
tf.fill 全定值数组

神经网络的实现过程

step1:准备数据集,提取特征,作为输入喂给神经网络(neural network)
step2:搭建NN结构,从输入到输出(先搭建计算图,再使用会话执行)
(NN前向传播算法------------->计算输出)
step3:大量特征数据喂给NN,迭代优化NN参数
(NN反向传播算法------------->优化参数训练模型)
step4:使用训练好的模型预测和分类

前向传播

搭建模型,实现推理(以全连接网络为例)
eg.生产一批零件将体积x1和重量x2为特征输入NN,通过NN后输出一个数值
在这里插入图片描述

# 模拟单个神经网络的计算
# create weight
# w1是输入层的权重矩阵,他的shape是[2,3],即2维数组,长度为3,
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
# w2是隐藏层的权重矩阵,shape是[3,1],即3维数组,长度为1
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

# create input x shape(1,2)
x = tf.constant([[0.7, 0.9]])

#定义前向传播过程
# 先计算隐藏层的数据,x的输出,y的输入
a = tf.matmul(x, w1)
# 计算y
y = tf.matmul(a, w2)
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(y.eval())

用tf.placeholder占位,在sess.run函数中使用feed_dict喂数据

喂一组
x = tf.placeholder(tf.float32,shape=(1,2))
sess.run(y,feed_dict={x:[[0.5,0.6]]})

喂多组
x = tf.placeholder(tf.float32,shape=(None,2))
sess.run(y,feed_dict={x:[[0.1,0.2],[0.2,0.3],[0.3,0.4]]})

反向传播

训练模型参数,在所有参数上用梯度下降,使用NN模型在训练数据上的损失函数最小。

损失函数(loss):

预测值(y)与已知答案(y_)的差距

均方误差

MSE:MSE(y_,y)
loss=tf.reduce_mean(tf.square(y_ - y))

反向传播的训练方法

以减小loss值为优化目标
train_step=tf.train.GraadientDescentOptimizer(learning_rate).minimize(loss)
train_step=tf.train.MonentumOptimizer(learning_rate,momentum).minimize(loss)
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

学习率

决定参数每次更新的幅度

搭建神经网络的“八股”

准备

import
常量定义
生成数据集

前向传播

定义输入、参数和输出
x=
y_=

w1=
w2=

a=
y=

反向传播

定义损失函数loss和反向传播方法train_step

生成会话

训练STEPS轮

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess_run(init_op)
    
    STEPS = 3000
    for i in range(STEPS):
        start = 
        end = 
        sess.run(train_step, feed_dict{:})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值