TensorFlow代码实现(二)[实现异或门(XOR)]

2024-03-06 04:48

本文主要是介绍TensorFlow代码实现(二)[实现异或门(XOR)],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一个实验:用神经网络实现异或门
测试数据如下:
[0,0]->[0]
[1,0]->[1]
[1,1]->[0]
[0,1]->[1]
数据量很小,但异或门远没有我想象的好写,原来在第一层的时候我使用的激活函数是relu,第一层有两个神经元;输出层使用的激活函数是softmax;学习率是0.01;loss function选的是梯度下降算法,weights和biases都是随机产生的非零数据。
后来发现这样训练出来的神经网络的预测值是[0.5,0.5,0.5,0.5]。
最后参考了别人的程序,改成了如下配置**第一层有16个神经元(其实影响不大),第一层使用的激活函数是relu;输出层使用的激活函数是sigmoid;loss function选的是adam,这样修改之后就开始像准确值逼近了!
看来深度学习会设计才是最重要的。
下面附上代码:

import tensorflow as tf
learning_rate = 0.01
x_data = [[0.,0.],[1.,0.],[1.,1.],[0.,1.]]
x = tf.placeholder("float", shape = [None,2])
y_data = [0,1,0,1]
y = tf.placeholder("float",shape=[None,1])
weights = {'w1':tf.Variable(tf.random_normal([2,16])),'w2':tf.Variable(tf.random_normal([16,1]))
}
biases = {'b1':tf.Variable(tf.random_normal([1])),'b2':tf.Variable(tf.random_normal([1]))
} 
def dnn(_X,_weights,_biases):d1 = tf.matmul(_X, _weights['w1'])+_biases['b1']d1 = tf.nn.relu(d1)d2 = tf.matmul(d1,_weights['w2'])+_biases['b2']d2 = tf.nn.sigmoid(d2)return d2
pred = dnn(x, weights, biases)cost = tf.reduce_mean(tf.square(y-pred))
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)
correct_pred = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))
init = tf.initialize_all_variables()
with tf.Session() as sess:sess.run(init)step = 1for _ in range(1500):batch_xs = tf.reshape(x_data,shape=[-1,2])batch_ys = tf.reshape(y_data,shape=[-1,1])#print(batch_xs)#print(batch_ys)sess.run(optimizer,feed_dict={x:sess.run(batch_xs),y:sess.run(batch_ys)})acc = sess.run(accuracy,feed_dict={x:sess.run(batch_xs),y:sess.run(batch_ys)})loss = sess.run(cost,feed_dict = {x:sess.run(batch_xs),y:sess.run(batch_ys)})#print("Step "+str(step)+",Minibatch Loss = "+"{:.6f}".format(loss)+", Training Accuracy = "+"{:.5f}".format(acc))step += 1if(step%100==0):print("Step "+str(step)+"    loss "+"{:.6f}".format(loss))print(sess.run(pred,feed_dict={x:sess.run(batch_xs)}))#    print(sess.run(weights))#    print(sess.run(biases))print("Optimization Finished!")

这篇关于TensorFlow代码实现(二)[实现异或门(XOR)]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/778886

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录