当前位置:网站首页>TensorFlow:tf.ConfigProto()与Session
TensorFlow:tf.ConfigProto()与Session
2022-08-04 05:28:00 【大黄猫一号】
转载链接 TensorFlow中的小知识:tf.ConfigProto()与Session
同时在这里做一个tensorflow的小型神经网路网络,代码如下:
#完整神经网络
import tensorflow as tf #导入tensorflow模块
import numpy as np #导入numpy模块
BATCH_SIZE = 8 #表示一次喂入神经网络多少组数据
seed = 23455 #每次都输出一样的随机数
#基于seed产生随机数
rng = np.random.RandomState(seed)
#随机数返回32行2列的矩阵,表示32组 数据作为输入
X = rng.rand(32,2)
#从X这个32行2列的矩阵中取出一行 判断如果小于1 给Y赋值1,如果不小于1 给Y赋值0
#作为数据数据集的标签(正确答案),数据标注
Y = [[int(x0 + x1 < 1)] for (x0,x1) in X]
print('X:\n',X)
print('Y:\n',Y)
#1.定义神经网络的输入、参数和输出,这里输入两个特征x,输出一个标签y_
x = tf.placeholder(tf.float32,shape=(None,2)) #利用占位符placeholder,输入float32的 一行两列的张量表示 输入n组特征
y_ = tf.placeholder(tf.float32,shape=(None,1)) #利用占位符placeholder,输入float32的 一行两列的张量表示 输入n组标签
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) #第一层网络,两行三列的正态分布随机数组成的矩阵,标准差为1,随机种子为1
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) #第一层网络,三行一列的正态分布随机数组成的矩阵,标准差为1,随机种子为1
#2.定义前向传播过程
a = tf.matmul(x,w1) #x经过第一层网络,矩阵加权乘法
y = tf.matmul(a,w2) #经过第二层网络,矩阵加权乘法,也就是最后一层的输出结果
#3.定义损失函数及反向出传播方法
loss = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) #梯度下降优化器
#4.生成会话,训练STEPS轮
sess = tf.Session()
init_op = tf.global_variables_initializer()
sess.run(init_op)
#输出目前未经训练的参数取值
#print('w1:',sess.run(w1))
#print('w2:',sess.run(w2))
#训练模型
STEPS = 5000 #训练5000轮
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: #每500轮打印一次loss值
total_loss = sess.run(loss,feed_dict={x:X,y_:Y})
print('经过%d轮训练,loss所有取值为:%g'%(i,total_loss))
#输出训练后的参数取值
print('输出训练后的参数取值:')
print('w1:\n',sess.run(w1))
print('w2:\n',sess.run(w2))
输出如下:
X: [[0.83494319 0.11482951] [0.66899751 0.46594987] [0.60181666 0.58838408] [0.31836656 0.20502072] [0.87043944 0.02679395] [0.41539811 0.43938369] [0.68635684 0.24833404] [0.97315228 0.68541849] [0.03081617 0.89479913] [0.24665715 0.28584862] [0.31375667 0.47718349] [0.56689254 0.77079148] [0.7321604 0.35828963] [0.15724842 0.94294584] [0.34933722 0.84634483] [0.50304053 0.81299619] [0.23869886 0.9895604 ] [0.4636501 0.32531094] [0.36510487 0.97365522] [0.73350238 0.83833013] [0.61810158 0.12580353] [0.59274817 0.18779828] [0.87150299 0.34679501] [0.25883219 0.50002932] [0.75690948 0.83429824] [0.29316649 0.05646578] [0.10409134 0.88235166] [0.06727785 0.57784761] [0.38492705 0.48384792] [0.69234428 0.19687348] [0.42783492 0.73416985] [0.09696069 0.04883936]] Y: [[1], [0], [0], [1], [1], [1], [1], [0], [1], [1], [1], [0], [0], [0], [0], [0], [0], [1], [0], [0], [1], [1], [0], [1], [0], [1], [1], [1], [1], [1], [0], [1]] 经过0轮训练,loss所有取值为:5.13118 经过500轮训练,loss所有取值为:0.429111 经过1000轮训练,loss所有取值为:0.409789 经过1500轮训练,loss所有取值为:0.399923 经过2000轮训练,loss所有取值为:0.394146 经过2500轮训练,loss所有取值为:0.390597 经过3000轮训练,loss所有取值为:0.388336 经过3500轮训练,loss所有取值为:0.386855 经过4000轮训练,loss所有取值为:0.385863 经过4500轮训练,loss所有取值为:0.385186 输出训练后的参数取值: w1: [[-0.69597054 0.8599247 0.0933773 ] [-2.3418374 -0.12466972 0.5866561 ]] w2: [[-0.07531644] [ 0.8627887 ] [-0.05937821]]
总结:
神经网络的实现过程(八股):准备、前传、反传、迭代
准备:
import 相关模块
定义常量
生成数据集
前向传播
定义输入
x =
y_ =
定义(网络层)参数:
w1 =
w2 =
定义网络推理计算过程
a =
y =
反向传播
定义损失函数
loss =
反向传播方法
train_step =
生成会话,训练STEPS轮,迭代
sess = tf.Session()
init_op = tf.global_variables_initializer()
sess.run(init_op)
#训练模型
STEPS = 5000 #训练5000轮
for i in range(STEPS):
start =
end =
sess.run(train_step,feed_dict)
边栏推荐
- NFT市场以及如何打造一个NFT市场
- npm install dependency error npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND
- MySQL事务详解(事务隔离级别、实现、MVCC、幻读问题)
- 剑指 Offer 2022/7/2
- 实际开发中,如何实现复选框的全选和不选
- 基于C语言的学生信息管理系统_(更新版)_(附源码和安装包)_课程设计_**往事随風**的博客
- 将自定义类型作为关联容器的key
- webrtc中的任务队列TaskQueue
- ES6 Const Let Var的区别
- 视图、存储过程、触发器