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初探的更多相关文章

  1. tensorflow初探

    TensorFlow是一个采用数据流图,用于数值计算的开源软件库.自己接触tensorflow比较的早,可是并没有系统深入的学习过,现在TF在深度学习已经成了"标配",所以打算系统 ...

  2. TensorFlow初探之简单神经网络训练mnist数据集(TensorFlow2.0代码)

    from __future__ import print_function from tensorflow.examples.tutorials.mnist import input_data #加载 ...

  3. 算法初探:Tensorflow及PAI平台的使用

    前言 Tensorflow这个词由来已久,但是对它的理解一直就停留在“听过”的层面.之前做过一个无线图片适配问题智能识别的项目,基于Tensorflow实现了GoogLeNet - Inception ...

  4. 【Magenta 项目初探】手把手教你用Tensorflow神经网络创造音乐

    原文链接:http://www.cnblogs.com/learn-to-rock/p/5677458.html 偶然在网上看到了一个让我很感兴趣的项目 Magenta,用Tensorflow让神经网 ...

  5. TensorFlow入门——MNIST初探

    import tensorflow.examples.tutorials.mnist.input_data as input_data import tensorflow as tf mnist = ...

  6. 深度学习初探——符号式编程、框架、TensorFlow

    一.命令式编程(imperative)和符号式编程(symblic) 命令式: import numpy as np a = np.ones(10) b = np.ones(10) * 2 c = b ...

  7. tensorflow学习5----GAN模型初探

    生成模型: 通过观测学习样本和标签的联合概率分布P(X,Y)进行训练,训练好的模型能够生成符合样本分布的新数据,在无监督学习方面,生成式模型能够捕获数据的高阶相关性,通过学习真实数据的本质特征,刻画样 ...

  8. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

  9. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

随机推荐

  1. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  2. springmvc 项目完整示例08 前台页面以及知识点总结

    至此已经基本测试成功了,我们稍作完善,让它成为一个更加完整的项目 我们现在重新规划下逻辑 两个页面 一个登录页面 一个欢迎页面 登陆页面输入账号密码,登陆成功的话,跳转登陆成功 欢迎页面 并且,更新用 ...

  3. Java设计模式总结

    什么是设计模式   设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.通过对这些设计模式的合理使用能够是我们的系统更加的健壮. 六大设计原则 ...

  4. c#连接oracle数据库底层方法

    using Oracle.ManagedDataAccess.Client;using System;using System.Collections;using System.Collections ...

  5. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  6. MySQL优化COUNT()查询

    COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一 COUNT()的作用 COUNT()是一个特殊的函数,有两种非常不同的作用: 统计某个列值的数量 统计行数 ...

  7. Spring框架基础(中)

    Spring对不同持久化技术进行支持 JDBC 导入spring-jdbc-4.3.5.RELEASE.jar.spring-tx-4.3.5.RELEASE.jar 创建对象,设置数据库信息 创建j ...

  8. js知识点总结

    组成 ECMAscript 基础语法     变量 数据类型 运算符 数组 函数 对象BOM 浏览器对象模型     window对象(获取浏览器宽高)     history对象     locat ...

  9. pd_ds中的hash

    前言 在c++的STL中,提供了一种hash函数,其用法和map是几乎一样的,但是速度却能快接近一倍 使用方法 需要的头文件 #include<ext/pb_ds/assoc_container ...

  10. Git命令备忘

    最近在用Git,查了点相关资料,逻辑依然不太明了,先整理一部分备忘,以后补充 一.本地Git与Github/码云的关联 1. 设置本地用户名,邮箱 git config --global user.n ...