使用带隐含层的神经网络拟合异或操作

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yu_1628060739/article/details/102689340

使用带隐含层的神经网络拟合异或操作*

实例描述:
通过构建符合异或规律的数据集作为模拟样本,构建一个简单的多层神经网络来拟合其样本特征完成分类任务。
1.数据集介绍
所谓的“异或数据”是来源于异或操作。
在这里插入图片描述从a)可以看出,当两个数相同时,输出为0,不相同时输出为1,这就是异或的规则。表示为两类数据就是(0, 0)和(1, 1)为一类,(0, 1)和(1, 0)为一类。
2.网络模型介绍
在这里插入图片描述

3.完整代码

import tensorflow as tf
import numpy as np
# 网络结构:2维输入 --> 2维隐藏层 --> 1维输出
#定义参数
learning_rate = 1e-4
n_input  = 2
n_label  = 1
n_hidden = 2

#定义占位符
x = tf.placeholder(tf.float32, [None,n_input])
y = tf.placeholder(tf.float32, [None, n_label])
#定义学习参数
weights = {
    'h1': tf.Variable(tf.truncated_normal([n_input, n_hidden], stddev=0.1)),
    'h2': tf.Variable(tf.random_normal([n_hidden, n_label], stddev=0.1))
    } 
biases = {
    'h1': tf.Variable(tf.zeros([n_hidden])),
    'h2': tf.Variable(tf.zeros([n_label]))
    } 

#定义网络模型
layer_1=tf.nn.relu(tf.add(tf.matmul(x,weights['h1']),biases['h1']))
y_pred=tf.nn.tanh(tf.add(tf.matmul(layer_1,weights['h2']),biases['h2']))

loss=tf.reduce_mean((y_pred-y)**2)
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

#手动建立x和y的数据集
X=[[0,0],[0,1],[1,0],[1,1]]
Y=[[0],[1],[1],[0]]
X=np.array(X).astype('float32')
Y=np.array(Y).astype('int16')

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(100000):
        sess.run(train_step,feed_dict={x:X,y:Y})
        
    print(sess.run(y_pred,feed_dict={x:X}))
    print('隐藏层输出:')
    print(sess.run(layer_1,feed_dict={x:X}))

结果:
在这里插入图片描述
第一个是4行1列的数组,用四舍五入法来取值,与我们定义的输出Y完全吻合。第二个为4行2列的数组,为隐藏层的输出。第二个输出是4行2列数组,其中第一列为隐藏层第一个节点的输出,第二列为隐藏层第二各节点的输出,四舍五入取整显示结果:

 [[0. 0.]
 [0. 1.]
 [0. 1.]
 [0. 1.]]

猜你喜欢

转载自blog.csdn.net/yu_1628060739/article/details/102689340
今日推荐