tensorflow 基础学习二:实现一个神经网络

tensorflow变量

在tensorflow中,变量(tf.Variable)的作用就是用来保存和更新神经网络中的参数,在声明变量的同时需要指定其初始值。

tensorflow中支持的随机数生成器:

函数名称 随机数分布 主要参数
tf.random_normal 正态分布 平均值、标准差、取值类型
tf.truncated_normal 正态分布,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新随机 平均值、标准差、取值类型
tf.random_uniform 平均分布 最小、最大取值,取值类型
tf.random_gamma Gamma分布 形状参数alpha、尺度参数beta、取值类型

tensorflow也支持使用常数来初始化一个变量,常用的常量生成函数如下表

函数名称 功能 实例
tf.zeros 产生全0的数组 tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]]
tf.ones   产生全1的数组 tf.ones([2,3],int32)->[[1,1,1],[1,1,1]]
tf.fill   产生一个全部为给定数字的数组 tf.fill([2,3],9)->[[9,9,9],[9,9,9]]
tf.constant   产生一个给定值的常量 tf.constant([1,2,3])->[1,2,3]

如下代码声明变量的几种方式:

import tensorflow as tf
# 生成一个2*3的矩阵,矩阵中的元素均值为0,标准差为2。
weights=tf.Variable(tf.random_normal([2,3],stddev=2))
# 生成一个初始值全为0,长度为3的变量
biases=tf.Variable(tf.zeros([3]))
# 使用其他变量的初始值来初始化新的变量
w2=tf.Variable(weights.initialized_value())
w3=tf.Variable(weights.initialized_value()*2.0)

实现一个简单的网络,代码如下

# 定义一个简单的网络
import tensorflow as tf
from numpy.random import RandomState

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

# 定义神经网络参数
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.placeholder(tf.float32,shape=(None,2),name=‘x-input‘)
y_=tf.placeholder(tf.float32,shape=(None,1),name=‘y-input‘)

# 定义前向传播
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)))
train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

# 通过随机数生成一个模拟数据集
rdm=RandomState(1)
dataset_size=128
X=rdm.rand(dataset_size,2)
Y=[[int(x1+x2<1)] for (x1,x2) in X]

with tf.Session() as sess:
    init_op=tf.global_variables_initializer()
    sess.run(init_op)

    print(‘训练前网络参数的值为:‘)
    print(sess.run(w1))
    print(sess.run(w2))

    # 设定训练的轮数
    STEPS=5000
    for i in range(STEPS):
        # 每次选取batch_size个样本进行训练
        start=(i*batch_size)%dataset_size
        end=min(start+batch_size,dataset_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 {} training step(s),cross entropy on all data is {}".
                  format(i,total_cross_entropy))

    print(‘训练后网络参数的值为:‘)
    print(sess.run(w1))
    print(sess.run(w2))
时间: 2024-07-31 17:57:19

tensorflow 基础学习二:实现一个神经网络的相关文章

puppet基础学习(二)

puppet基础学习(二) 六.ResourceOrdering(资源定序) 使用变化参数before , require , notify , subscribe catalog是对一个给定的系统的所有资源及关系的编译,在编译catalog时,除非我们指定资源的执行顺序,不然puppet是以其自己的顺序管理,大多数时候puppet指定适当的方式,例如puppet管理用户gigabyte应该存在和文件夹/home/gigabyte/bin应该存在并属于用户gigabyte时,puppet会自动指

Android Afinal框架学习(二) FinalActivity 一个IOC框架

框架地址:https://github.com/yangfuhai/afinal 对应的源码: net.tsz.afinal.annotation.view.* FinalActivity FinalActivity是一个基础类,结合注解实现了,依赖注入(view的资源id,常用的监听器), 利用set方式注入 完全注解方式就可以进行UI绑定和事件绑定,无需findViewById和set event Listener 这个过程:initInjectedView>findViewById.set

tensorflow 基础学习八:重构MNIST神经网络

使用前面介绍的技术,实践一个神经网络模型.将训练和测试分成两个独立的程序,训练网络的程序可以持续输出训练好的模型,测试程序可以每隔一段时间检验最新模型的正确率. # -*- coding:utf-8 -*- import tensorflow as tf # 定义神经网络结构相关的参数 INPUT_NODE=784 OUTPUT_NODE=10 LAYER1_NODE=500 # 通过tf.get_variable函数来获取变量.在训练神经网络时会创建这些变量:在测试时会通过 # 保存的模型加载

tensorflow 基础学习九:mnist卷积神经网络

mnist_inference.py: # -*- coding:utf-8 -*- import tensorflow as tf # 配置神经网络参数 INPUT_NODE=784 OUTPUT_NODE=10 IMAGE_SIZE=28 NUM_CHANNELS=1 NUM_LABELS=10 # 第一层卷积层的尺寸和深度 CONV1_DEEP=32 CONV1_SIZE=5 # 第二层卷积层的尺寸和深度 CONV2_DEEP=64 CONV2_SIZE=5 # 全连接层的节点个数 FC_

tensorflow 基础学习五:MNIST手写数字识别

MNIST数据集介绍: from tensorflow.examples.tutorials.mnist import input_data # 载入MNIST数据集,如果指定地址下没有已经下载好的数据,tensorflow会自动下载数据 mnist=input_data.read_data_sets('.',one_hot=True) # 打印 Training data size:55000. print("Training data size: {}".format(mnist.

CSS入门基础学习二

我们下午继续学习CSS的入门基础,搬上你的小板凳赶快进入吧! 一.背景(background) Background-color:背景颜色 background-image (背景图片) background-repeat(设置背景平铺)  repeat (默认值) no-repeat (不平铺) repeat-x  (横向平铺) repeat-y (纵向平铺) background-position (设置背景位置) 设置具体值: left| right| top| bottom| cnete

HTML基础学习(二)&mdash;CSS

一.CSS概述     CSS(Cascading Stytle Sheets)层叠样式表,用来定义网页的显示效果.可以解决HTNL代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显示效果.即CSS将网页内容和显示样式分离,提高了显示功能.   二.CSS与HTML结合方式 1.style属性方式      利用标签中style属性来改变每个标签的显示样式. <body> <div style="background-color: #76EE00;"

tensorflow 基础学习三:损失函数讲解

交叉熵损失: 给定两个概率分布p和q,通过q来表示p的交叉熵为: 从上述公式可以看出交叉熵函数是不对称的,即H(p,q)不等于H(q,p). 交叉熵刻画的是两个概率分布之间的距离,它表示通过概率分布q来表示概率分布p的困难程度.所以使用交叉熵作为 神经网络的损失函数时,p代表的是正确答案,q代表的是预测值.当两个概率分布越接近时,它们的交叉熵也就越小. 由于神经网络的输出并不是一个概率分布,所以需要先使用softmax将网络输出变成一个概率分布,再计算交叉熵. 比如,原始的神经网络输出为y1,y

深度学习框架-Tensorflow基础学习

Tensorflow简介 1. Tensorflow是一个编程系统,使用图来表示计算任务.使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op. 2. Tensorf