TensorFlow编程基础4(小白笔记)(全连接神经网络)

该博客展示了如何利用TensorFlow构建一个两层神经网络,包括定义输入输出占位符,权重和偏置初始化,前向传播,损失函数,梯度下降优化器以及训练过程。在训练过程中,模型在测试集上的准确率被监控和打印。
摘要由CSDN通过智能技术生成
import tensorflow as tf
import numpy as np
#tf.reset_default_graph()
#定义测试集
def train_data():
    x = [[0.2],[0.4],[0.7],[1.2],[1.4],[1.8],[1.9],[2],[0.11],[0.16],[0.5]];
    y = [[1,0],[1,0],[1,0],[0,1],[0,1],[0,1],[0,1],[1,0],[1,0],[1,0],[1,0]];
    return (x,y);

def test_data():
    x = [[0.3],[0.6],[0.8],[1.3],[1.5]]
    y = [[1,0],[1,0],[1,0],[0,1],[0,1]]
    return (x,y)

#定义生成权重W的函数,形参为W的维度,权重采用正态分布初始化
num_w=0
def weight_variable(shape):
    #定义全局变量,方便连续为权重命名
    global num_w
    name = 'weight'+str(num_w)
    w = tf.get_variable(name,shape=shape,initializer=tf.random_normal_initializer(stddev=1,dtype=tf.float32))
    num_w+=1
    return w

#定义生成偏置b的函数,形参为b的形状,偏执采用正态分布初始化
num_b = 0
def bias_variable(shape):
    global num_b
    name = 'biase'+str(num_b)
    b = tf.get_variable(name,shape=shape,initializer=tf.random_normal_initializer(stddev=1,dtype=tf.float32))
    num_b+=1
    return b

#定义输入输出占位符
x = tf.placeholder(dtype=tf.float32,shape=[None,1],name='x-imput')
y_= tf.placeholder(dtype=tf.float32,shape=[None,2],name='y-input')

#定义两层网络的权重和偏置
#隐层
w1 = weight_variable([1,3])
b1 = bias_variable([3])
w2 = weight_variable([3,2])
b2 = bias_variable([2])

#定义计算过程,第一层权重w1和偏置b1,激活函数为sigmoid(输出层权重w2和偏置b2,无激活函数)
layer1 = tf.nn.sigmoid(tf.matmul(x,w1)+b1)
y = tf.matmul(layer1,w2)+b2

#定义损失函数为l2损失
loss = tf.nn.l2_loss(y-y_)

#定义优化方法为梯度下降,学习率为0.001,优化目标为最小化损失函数
train_op = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss)

#以分类正确率作为评价标准
correct_predition = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_predition,tf.float32))

#训练模型
with tf.Session() as sess:
    #变量初始化
    sess.run(tf.global_variables_initializer())
    
    #定义训练数据与标签
    x_train = train_data()[0]
    y_train = train_data()[1]
    
    #给占位符喂数据并进行10000轮训练
    for i in range(10000):
        sess.run(train_op,feed_dict = {x:x_train,y_:y_train})
        
        if i%1000 == 0:
            print('epoch:',i,'test accuracy:',sess.run(accuracy,feed_dict={x:test_data()[0],y_:test_data()[1]}))
            
    #在测试集上做预测并输出正确率
    print(sess.run(accuracy,feed_dict={x:test_data()[0],y_:test_data()[1]}))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值