Python 利用tensorflow实现与门运算(AND)

最近被线上笔试题打击到了,决定重头开始学习神经网络,算是小白一个,这个是自己编写的第一个关于神经网络的python程序--关于“与”门的实现,实现 与或非 三种门都只需要输入层和输出层,不需要隐层,也就是说这三中门是线行可分的。

与门
x1x2y
000
010
100
111

 编写思路:就是一个不带隐层的基本神经网络,把graph搭建后,feed data即可,虽然很简单,作为小白还是不是一次成功的,这里记一下自己出错的地方,在定义占位符时,一般tensorflow中常用的是tf.float32,tf.float64等数据类型,我定义没写错,但是feed的data却写为了int型,然后是定义的输入维度搞错。代码如下所示:

'''
用tensorflow实现与门(AND)
author_Qingmu
2019.10.01
'''

import tensorflow as tf

#创建数据

x_data=[[0.0,0.0],[0.0,1.0],[1.0,0.0],[1.0,1.0]]  # input
y_data=[[0.0],[0.0],[0.0],[1.0]]                  # predict
we_num=2 #权重个数
step=1000 #训练次数
x=tf.placeholder(tf.float32,shape=[None,we_num])
y=tf.placeholder(tf.float32,shape=[None,1])
#构建神经网络结构

Weights=tf.Variable(tf.truncated_normal([we_num,1],-0.1,0.1))
b=tf.Variable(tf.truncated_normal([1],0.1))

output=tf.sigmoid(tf.matmul(x,Weights)+b) #采用sigmoid函数
loss=tf.reduce_mean(tf.square(output-y)) #采用均方误差作为损失函数
train=tf.train.GradientDescentOptimizer(0.5).minimize(loss)

#初始化
init=tf.global_variables_initializer()

#创建会话
sess=tf.Session()
sess.run(init)

print('开始训练...')
for s in range(step):
    sess.run([train],feed_dict={x:x_data,y:y_data})
    # if s % 20 ==0:
    #     print(sess.run(Weights))

print('训练结束,开始测试')
test_x=[[0.0,1.0],[0.0,0.0],[1.0,1.0],[1.0,0.0]]
print(sess.run(output,feed_dict={x:test_x}))


最终结果还是可以的,但是因为第一次写神经网络,总感觉很多问题不太清楚,比如我是不是可以不用激活函数sigmoid等等。

下面是一些参考的链接:

https://www.cnblogs.com/Belter/p/6711160.html

https://blog.csdn.net/wfrainn/article/details/80383699

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值