一、TensorFlow初探
import tensorflow as tf
a = tf.constant([1.0, 2.0], name='a', dtype=tf.float32) # 定义常量向量
b = tf.constant([2.0, 3.0], name='b')
result = a + b # 向量相加
print(result)
# 先生成一个会话,通过该会话来计算结果
# sess = tf.Session()
sess = tf.InteractiveSession() # 自动将生成的会话注册为默认会话
print(sess.run(result))
print(result.eval(session=sess))
sess.close() # 关闭会话,释放资源
计算模型
- TensorFlow中的所有计算都会被转化为计算图上的节点。
- 而节点之间的边描述了计算之间的依赖关系。
- 在TensorFlow中,张量可以被简单地理解为多维数组。
- TensorFlow是一个通过计算图的形式来表述计算的编程系统。
g1 = tf.Graph() # 生成新的计算图
with g1.as_default():
# 在计算图g1中定义变量'v',并设置初始值为0
v = tf.get_variable("v", initializer=tf.zeros(shape=[1]))
# 在计算图g1中读取变量'v'的值
with tf.Session(graph=g1) as sess: # 通过上下文管理器来使用会话
tf.global_variables_initializer().run()
with tf.variable_scope('', reuse=True):
print(sess.run(tf.get_variable('v')))
数据模型
- 在张量中,并没有真正保存数字,它保存的是如何得到这些数字的计算过程。
- 一个张量中主要保存了三个属性:名字、维度、类型。
- 张量的命名可通过"node:src_output"的形式给出。其中,node为节点名称,src_output表示当前张量来自节点的第几个输出。
- TensorFlow支持的类型主要包括:tf.float32, tf.float64, tf.int8, tf.int16, tf.int32, tf.int64, tf.uint8, tf.bool, tf.complex64, tf.complex128
运行模型
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
sess1 = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)
TensorFlow及神经网络
神经网络解决分类问题的主要步骤:
- 提取问题中实体的特征向量作为神经网络的输入。
- 定义神经网络的结构,并定义如何从神经网络的输入得到输出。
- 通过训练数据来调整神经网络中参数的取值,这就是训练神经网络的过程。
- 使用训练好的神经网络来预测未知的数据。
全连接神经网络:相邻两层之间任意两个节点之间都有连接。
TensorFlow支持的随机数生成函数:
tf.random_normal:正态分布。tf.truncated_normal:正态分布,但若随机值偏离平均值超过2个标准差,将被重新随机。tf.random_uniform:平均分布。tf.random_gamma:Gamma分布。
TensorFlow常数生成函数:
tf.zeros([2,3], int32):产生全0的数组。tf.ones([2,3], int32):产生全1的数组。tf.fill([2,3], 9):产生一个全部为给定数字的组合。tf.constant([1,2,3):产生一个给定值的常量。
# 声明一个2*3的矩阵变量,并赋予均值为0,标准差为2的随机数
weigths = tf.Variable(tf.random_normal([2, 3], mean=0, stddev=2))
biases = tf.Variable(tf.zeros([3]))
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的矩阵
a = tf.matmul(x, w1) # 矩阵乘法
y = tf.matmul(a, w2)
with tf.Session() as sess:
# sess.run(w1.initializer) # 逐个初始化变量
# sess.run(w2.initializer)
# 初始化所有变量
init_op = tf.global_variables_initializer()
sess.run(init_op)
print(sess.run(y))
print(tf.all_variables)
tf.all_variables:可拿到当前计算图上所有的变量。tf.trainable_variables:得到所有需要优化的参数。- 变量的类型是不可改变的。
- 维度在程序运行中是有可能改变的,需通过设置参数
validate_shape=False。
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([2, 2], stddev=1, seed=1))
# tf.assign(w1, w2) # wrong
tf.assign(w1, w2, validate_shape=False)
# 使用placeholder实现前向传播算法
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# 输入为n*2矩阵,前向传播结果为n*1的矩阵
# placeholder中数据的维度信息可以根据提供的数据推导得出,所有不一定要给出
x = tf.placeholder(tf.float32, shape=(3, 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)) # 某个需要的placeholder没有被指定取值,报错
print(sess.run(y, feed_dict={x: [[0.7, 0.9], [0.1, 0.4], [0.5, 0.8]]})) # 指定x的取值
from numpy.random import RandomState
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(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 %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy))
print(sess.run(w1))
print(sess.run(w2))
一、TensorFlow初探的更多相关文章
- tensorflow初探
TensorFlow是一个采用数据流图,用于数值计算的开源软件库.自己接触tensorflow比较的早,可是并没有系统深入的学习过,现在TF在深度学习已经成了"标配",所以打算系统 ...
- TensorFlow初探之简单神经网络训练mnist数据集(TensorFlow2.0代码)
from __future__ import print_function from tensorflow.examples.tutorials.mnist import input_data #加载 ...
- 算法初探:Tensorflow及PAI平台的使用
前言 Tensorflow这个词由来已久,但是对它的理解一直就停留在“听过”的层面.之前做过一个无线图片适配问题智能识别的项目,基于Tensorflow实现了GoogLeNet - Inception ...
- 【Magenta 项目初探】手把手教你用Tensorflow神经网络创造音乐
原文链接:http://www.cnblogs.com/learn-to-rock/p/5677458.html 偶然在网上看到了一个让我很感兴趣的项目 Magenta,用Tensorflow让神经网 ...
- TensorFlow入门——MNIST初探
import tensorflow.examples.tutorials.mnist.input_data as input_data import tensorflow as tf mnist = ...
- 深度学习初探——符号式编程、框架、TensorFlow
一.命令式编程(imperative)和符号式编程(symblic) 命令式: import numpy as np a = np.ones(10) b = np.ones(10) * 2 c = b ...
- tensorflow学习5----GAN模型初探
生成模型: 通过观测学习样本和标签的联合概率分布P(X,Y)进行训练,训练好的模型能够生成符合样本分布的新数据,在无监督学习方面,生成式模型能够捕获数据的高阶相关性,通过学习真实数据的本质特征,刻画样 ...
- tensorflow笔记(五)之MNIST手写识别系列二
tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...
- 『TensorFlow』专题汇总
TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...
随机推荐
- [十七]基础类型BigDecimal简介
BigDecimal是不可变的.任意精度的.有符号的.十进制数. 组成部分 BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成 BigDecimal ...
- 斐波那契数列 (C#)
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...
- Lambda表达式资料整理
重温委托,匿名方法,Lambda,泛型委托,表达式树 第一:委托 有些教材,博客说到委托都会提到事件,虽然事件是委托的一个实例,但是为了理解起来更简单,今天只谈委托不谈事件.先上一段代码: 下边的 ...
- Js的reduce()方法
Js 数组reduce()方法应用一个函数针对数组的两个值(从左到右),以减至一个值. 语法:array.reduce(callback[, initialValue]) 参数说明: 1)callba ...
- kafka配置记录
1. 准备三台机器,系统CentOs6 2. 安装好JDK和zookeeper 参考: zookeeper配置记录 3. 解压安装包到指定目录 tar -zxvf kafka_2.12-2.1.0.t ...
- vue 如何点击按钮返回上一页
1,vue 如何点击按钮返回上一页呢? 这是vue挂载的范围html代码 <div @click="goOff()">返回</div> 下面是点击返回的方法 ...
- Chrome 插件——二维码生成笔记
原来用了几个生成二维码的插件,总是遇见各种问题……最后索性自己弄一个,这里顺便记录一下. Chrome 插件很开放!!!你只要拿到了crx文件,然后把文件的后缀名改为zip,就可以解压了,最后一切的一 ...
- Thrift 入门教程
1. 概述 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erl ...
- mysql特殊查询----分组后排序
使用的示例表 学生表----student 表结构 数据 查询方法 一.第一种方法 我认为这是比较传统,比较容易理解的一种方式,使用自连接,并在连接条件中作比较,之后再对查询条件分组统计,排序. se ...
- 06-Nodejs介绍
06-Nodejs介绍 打开Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一 ...