Tensorflow 搭建简单神经网络 | Python

来源:互联网 发布:大闹天宫数据库密码 编辑:程序博客网 时间:2024/05/21 10:16

本案例为回归问题,采用了一层隐层,隐层和输出层的激活函数都为 relu,损失函数MSE。

import tensorflow as tffrom numpy.random import RandomStatew1 = tf.Variable(tf.truncated_normal([2,3],seed=1))w2 = tf.Variable(tf.truncated_normal([3,1],seed=1))x = tf.placeholder(dtype=tf.float32,shape=[None,2]) #placeholder 存放 x:features ,y_real:labelsy_real = tf.placeholder(dtype=tf.float32,shape=[None,1])a = tf.nn.relu(tf.matmul(x,w1))  #神经元的激活函数为 relu;隐层y_pre = tf.nn.relu(tf.matmul(a,w2)) #输出层sample_size = 20000 #训练样本数量rds = RandomState(0) #随机种子X = rds.rand(sample_size,2)Y = [[int(20*x1+30*x2)]+rds.rand(1) for (x1,x2) in X] # y_label=20*x1+30*x2+noise    MSE = tf.reduce_mean(abs(y_real-y_pre)) # 使用均方误差(MSE)作为损失函数train_step = tf.train.GradientDescentOptimizer(1e-3).minimize(MSE)  # 反向传播算法为:GradientDescentOptimizer,learing rate = 1e-3step = 20000 #训练迭代次数batch = 500  #批大小为 500start = 0    # 每个batch 的开始和结束指针end = batchsess = tf.Session()sess.run(tf.global_variables_initializer())for i in range(step):    sess.run(train_step,feed_dict={x:X[start:end],y_real:Y[start:end]})    if not i%20:        H = sess.run(MSE,feed_dict={x:X[start:end],y_real:Y[start:end]})        print ("MSE:",H)        if H<0.4:  #采用stop early 的方法防止过拟合,节省训练时间。            break    strat = end if end<sample_size else 0    end = start+batchy1 = sess.run(y_pre,feed_dict={x:X[start:end]})y2 = Y[start:end]sess.close()   #训练结果的部分展示for i in range(100):    print(y1[i],y2[i])


原创粉丝点击