简单神经网络

简介: 1. 三层简单神经网络import tensorflow as tf1.1 定义变量w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))w2= tf.

1. 三层简单神经网络

import tensorflow as tf

1.1 定义变量

w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
x = tf.constant([[0.7, 0.9]])  

1.2 定义前向传播的神经网络(forward-propagation)

img_c206c5bfc6afd04eb3fd9d61dd912a1e.jpe

a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

1.3 调用会话输出结果

sess = tf.Session()
sess.run(w1.initializer)  
sess.run(w2.initializer)  
print(sess.run(y))  
sess.close()
[[ 3.95757794]]

2. 使用placeholder

x = tf.placeholder(tf.float32, shape=(1, 2), name="input")      # 虽然维度不一定要指定,但是指定后可以降低出错率。
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()

init_op = tf.global_variables_initializer()    # 调用初始化变量
sess.run(init_op)

print(sess.run(y, feed_dict={x: [[0.7,0.9]]}))
[[ 3.95757794]]

3. 增加多个输入

x = tf.placeholder(tf.float32, shape=(3, 2), name="input")
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()
#使用tf.global_variables_initializer()来初始化所有的变量
init_op = tf.global_variables_initializer()  
sess.run(init_op)

print(sess.run(y, feed_dict={x: [[0.7,0.9],[0.1,0.4],[0.5,0.8]]}))   # 输入3个样例
[[ 3.95757794]
 [ 1.15376544]
 [ 3.16749239]]

img_851adccd24df2c9bce1f47a202d9f32d.png

img_7009394a5d197a636dcf2da37891cd8f.png

import tensorflow as tf
from numpy.random import RandomState

4. 完整神经网络样例程序

1. 定义神经网络的参数,输入和输出节点。

batch_size = 8      # 定义训练数据batch的大小

# 通过`seed`设定随机种子,可以保证每次运行得到的结果是一样的。
w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

# 在 `shape`的一个维度上使用`None`可以方便使用不大的batch大小。在训练时需要把数据分成比较小的batch,但是在测试时,可以一次性的使用全部的数据。当
# 数据集比较小时方便测试,但数据集比较大时会导致内存溢出。
x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input")
y_= tf.placeholder(tf.float32, shape=(None, 1), name='y-input')

2. 定义前向传播过程,损失函数及反向传播算法(back-propagation)。

a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))    # 交叉熵,`y_` 代表正确结果,`y` 代表预测值
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)      # 反向传播优化方法

3. 生成模拟数据集。

rdm = RandomState(1)
X = rdm.rand(128,2)
#  定义规则来给出样本的标签,在这里所有的 `x1 + x2 < 1` 的样本被认为是正样本,而其他样本为负样本。
Y = [[int(x1+x2 < 1)] for (x1, x2) in X]

4. 创建一个会话来运行TensorFlow程序。

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    
    # 输出目前(未经训练)的参数取值。
    print("w1:", sess.run(w1))
    print("w2:", sess.run(w2))
    print("\n")
    
    # 训练模型。
    STEPS = 5000      # 设定训练轮数
    for i in range(STEPS):
        # 每次选取batch_size个样本进行训练
        start = (i*batch_size) % 128
        end = (i*batch_size) % 128 + batch_size

        # 通过选取的样本训练神经网络并更新参数
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
        if i % 1000 == 0:
            # 每隔一段时间计算在所有数据的交叉熵并输出
            total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
            print("After %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy))
    
    # 输出训练后的参数取值。
    print("\n")
    print("w1:", sess.run(w1))
    print("w2:", sess.run(w2))
w1: [[-0.81131822  1.48459876  0.06532937]
 [-2.4427042   0.0992484   0.59122431]]
w2: [[-0.81131822]
 [ 1.48459876]
 [ 0.06532937]]


After 0 training step(s), cross entropy on all data is 0.0674925
After 1000 training step(s), cross entropy on all data is 0.0163385
After 2000 training step(s), cross entropy on all data is 0.00907547
After 3000 training step(s), cross entropy on all data is 0.00714436
After 4000 training step(s), cross entropy on all data is 0.00578471


w1: [[-1.96182752  2.58235407  1.68203771]
 [-3.46817183  1.06982315  2.11788988]]
w2: [[-1.82471502]
 [ 2.68546653]
 [ 1.41819501]]
探寻有趣之事!
目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
296 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
472 44
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
687 222
|
2天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
134 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1687 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
936 62