搭建神经网络的八股过程——案列演示

搭建神经网络的八股过程

1 准备

import 常量定义 然后生成数据集 (数据是第一位  练习中可以用random来生成)

2 前向传播

定义输入、参数和输出  
        x=        (输入为x   标准答案是y_)
        y_=
		w1=		(第一层网络的参数w1)
		w2=     (第二层网络的参数w2)
		a=
		y=       (用矩阵 求出y)

3 反向传播

定义损失函数、反向传播方法
		loss =                #损失函数
		train_step =      #反向传播方法

3 生成会话,训练STEPS轮

with tf.session() as sess
			Init_op = tf.global_variables_initializer()
			sess_run(init_op)

		    STEPS =300
		    for i  in range(STEPS):
		    		start = 
		    		end = 
		    		sess.run(train_step,feed_dict:)

由于是放在Linux centos7上运行的代码,自然少不了vim 一个文件。最后在代码写完了之后,遇到一个错误就是跳出
TabError: inconsistent use of tabs and spaces in indentation
这样的错误也是python语言最难受的地方 ,他无法区分tab和空格
解决方法 :在pycharm中的 code下 点击reformat code ,最后复制到Linux上。

案列代码如下

import tensorflow as tf
import numpy as np

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)

# 第一步 神经网络的输入
x = tf.placeholder(tf.float32, shape=(None, 2))  # 特征  体积 重量
y_ = tf.placeholder(tf.float32, shape=(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 = tf.reduce_mean(tf.square(y - y_))  # 计算的数值和实际的标准误   均方误差
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)  # 梯度下降 (重点) 学习率 =0.001

# 生成会话。进行训练
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    # 输出目前(未经训练)参数取值
    print("w1:\n", sess.run(w1))
    print("w2:\n", sess.run(w2))
    print("\n")

    # 一共300轮
    STEPS = 3000
    for i in range(STEPS):
        start = (i * BATCH_SIZE) % 32
        end = start + BATCH_SIZE
        # 每轮从 X数据集和Y的标签中,选取 从start到end喂入神经网络   用sess.run进行训练
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
        # 每500轮打印出loss值
        if (i % 500 == 0):
            total_loss = sess.run(loss, feed_dict={x: X, y_: Y})
            print("After %d training step(s),loss on all data is %g" % (i, total_loss))

    # 输出训练后的数据
    print("\n")
    print("w1:\n", sess.run(w1))
    print("w2:\n", sess.run(w2))

最后打印的结果:
未经训练的参数
w1:
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
w2:
[[-0.8113182 ]
[ 1.4845988 ]
[ 0.06532937]]

After 0 training step(s),loss on all data is 5.13118
After 500 training step(s),loss on all data is 0.429111
After 1000 training step(s),loss on all data is 0.409789
After 1500 training step(s),loss on all data is 0.399923
After 2000 training step(s),loss on all data is 0.394146
After 2500 training step(s),loss on all data is 0.390597

训练完成的数据
w1:
[[-0.7000663 0.9136318 0.08953571]
[-2.3402493 -0.14641267 0.58823055]]
w2:
[[-0.06024267]
[ 0.91956186]
[-0.0682071 ]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值