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