tensorflow 不能访问官网为什么总是访问不了

极客学院团队出品 · 更新于
使用 TensorFlow, 你必须明白 TensorFlow:
使用图 (graph) 来表示计算任务.
在被称之为 会话 (Session) 的上下文 (context) 中执行图.
使用 tensor 表示数据.
通过 变量 (Variable) 维护状态.
使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.
TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op
(operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算,
产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组.
例如, 你可以将一小组图像集表示为一个四维浮点数数组,
这四个维度分别是 [batch, height, width, channels].
一个 TensorFlow 图描述了计算的过程. 为了进行计算, 图必须在 会话 里被启动.
会话 将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法.
这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是
ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是
tensorflow::Tensor 实例.
TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤
被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op.
例如, 通常在构建阶段创建一个图来表示和训练神经网络, 然后在执行阶段反复执行图中的训练 op.
TensorFlow 支持 C, C++, Python 编程语言. 目前, TensorFlow 的 Python 库更加易用,
它提供了大量的辅助函数来简化构建图的工作, 这些函数尚未被 C 和 C++ 库支持.
三种语言的会话库 (session libraries) 是一致的.
构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算.
Python 库中, op 构造器的返回值代表被构造出的 op 的输出, 这些返回值可以传递给其它
op 构造器作为输入.
TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点. 这个默认图对
许多程序来说已经足够用了. 阅读
来了解如何管理多个图.
import tensorflow as tf
# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])
# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])
# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
默认图现在有三个节点, 两个 constant() op, 和一个matmul() op. 为了真正进行矩阵相乘运算, 并得到矩阵乘法的
结果, 你必须在会话里启动这个图.
在一个会话中启动图
构造阶段完成后, 才能启动图. 启动图的第一步是创建一个 Session 对象, 如果无任何创建参数,
会话构造器将启动默认图.
欲了解完整的会话 API, 请阅读.
# 启动默认图.
sess = tf.Session()
# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出.
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
# 返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print result
# ==& [[ 12.]]
# 任务完成, 关闭会话.
sess.close()
Session 对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 &with& 代码块
来自动完成关闭动作.
with tf.Session() as sess:
result = sess.run([product])
print result
在实现上, TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU
或 GPU). 一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测. 如果检测到 GPU, TensorFlow
会尽可能地利用找到的第一个 GPU 来执行操作.
如果机器上有超过一个可用的 GPU, 除第一个外的其它 GPU 默认是不参与计算的. 为了让 TensorFlow
使用这些 GPU, 你必须将 op 明确指派给它们执行. with...Device 语句用来指派特定的 CPU 或 GPU
with tf.Session() as sess:
with tf.device("/gpu:1"):
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
设备用字符串进行标识. 目前支持的设备包括:
"/cpu:0": 机器的 CPU.
"/gpu:0": 机器的第一个 GPU, 如果有的话.
"/gpu:1": 机器的第二个 GPU, 以此类推.
阅读章节, 了解 TensorFlow GPU 使用的更多信息.
交互式使用
文档中的 Python 示例使用一个会话
启动图, 并调用
方法执行操作.
为了便于使用诸如
之类的 Python 交互环境, 可以使用
Session 类, 使用
Session.run(). 这样可以避免使用一个变量来持有会话.
# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果
sub = tf.sub(x, a)
print sub.eval()
# ==& [-2. -1.]
TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor.
你可以把 TensorFlow tensor 看作是一个 n 维的数组或列表. 一个 tensor 包含一个静态类型 rank, 和
一个 shape. 想了解 TensorFlow 是如何处理这些概念的, 参见
for more details.
变量维护图执行过程中的状态信息. 下面的例子演示了如何使用变量实现一个简单的计数器. 参见
章节了解更多细节.
# 创建一个变量, 初始化为标量 0.
state = tf.Variable(0, name="counter")
# 创建一个 op, 其作用是使 state 增加 1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 首先必须增加一个`初始化` op 到图中.
init_op = tf.initialize_all_variables()
# 启动图, 运行 op
with tf.Session() as sess:
# 运行 'init' op
sess.run(init_op)
# 打印 'state' 的初始值
print sess.run(state)
# 运行 op, 更新 'state', 并打印 'state'
for _ in range(3):
sess.run(update)
print sess.run(state)
代码中 assign() 操作是图所描绘的表达式的一部分, 正如 add() 操作一样. 所以在调用 run()
执行表达式之前, 它并不会真正执行赋值操作.
通常会将一个统计模型中的参数表示为一组变量. 例如, 你可以将一个神经网络的权重作为某个变量存储在一个 tensor 中.
在训练过程中, 通过重复运行训练图, 更新这个 tensor.
为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor,
这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.Session() as sess:
result = sess.run([mul, intermed])
print result
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。
上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制
可以临时替代图中的任意操作中的 tensor
可以对图中任何操作提交补丁, 直接插入一个 tensor.
feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数.
feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 &feed& 操作,
标记的方法是使用 tf.placeholder() 为这些操作创建占位符.
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print sess.run([output], feed_dict={input1:[7.], input2:[2.]})
# [array([ 14.], dtype=float32)]
for a larger-scale example of feeds.
如果没有正确提供 feed, placeholder() 操作将会产生错误.
MNIST 全连通
给出了一个更大规模的使用 feed 的例子.TensorFlow开源了
今早来看到的,谷歌开源了他们的机器学习工具TensorFlow,怕忘就把链接先记下来。
非常愉快的是这两个地址都没有被墙。大家可以愉快地访问。
简单看了一下,给了两种API,Python和C++的,果然机器学习领域还是Python的天下。
然后只有Linux/Unix和MacOS的安装方法,貌似是不支持Windows的。然后官方推荐用虚拟环境VirtualEnv来跑……不知道为什么,不过不纠结,回头试试。
竟然上百度搜索第二页了,我还没做SEO呢。。。
真心受宠若惊。那就好好写一下。
学习笔记先放一下,有几个事情比较有意思的先讨论一下。
第一:谷歌开放的是个什么鬼?
新闻里面有一些已经说了,这个tensorflow是一个机器学习的工具。机器学习我就不多扯了,现在大数据概念火得很的,相信大家都熟悉。
这个东西很牛应该是没有问题的,毕竟是GoogleX出来的东西,至少肯定比我自己写出来的算法牛逼。那接下来就是怎么用的问题了。
tensorflow是个什么工具?这是给谁用的?需要什么基础?跑在什么环境里面?是企业级的应用还是个人级的应用?要用什么语言来写?
反正这些是我刚看到这条消息的时候冒出来的想法。
总结了一下文档和介绍,结论有一点伤人:
<font COLOR="#.
tensorflow是一个程序库,供数据分析人员使用。但是只有Python和C++接口,说明只有Python和C++程序员可以用(这就是我为什么这两天突然开始看Python的原因)。
<font COLOR="#.&不支持Windows,或者说现在还没出Windows的官方安装指南(我也的确没找到安装包,
理论上来说开源的应该可以自己构建,不过想想都觉得麻烦)。也就是说要使用这个工具需要比较熟悉Linux工作环境,或者Mac环境。
代码时开源的所以个人肯定能用,但上述两条基本上限制了大部分非程序员出身的数据分析人员使用此工具。从定义里就可以很明显看出来:官方文档说明的是,tensorflow是一个库。库的话,就不是一个工具,没有GUI,必须得依靠程序调用来运行(而且还得有台Linux机。个人感觉用虚拟机来跑不太科学)。总体而言对非程序员来说上手成本有点高。这样一来基本上只有企业中以数据分析为职责的员工才可能会花时间来研究这个。高校里面的学生如果没有对应项目的话估计也难。
第二:为什么会选择开源?有没有什么陷阱?
说实话我之前是真没想到谷歌会把这套东西拿出来。按他们自己的说法,tensorflow会“成为机器学习界的安卓”。这话我是100%同意的。
不熟悉背景的同学可能不知道,谷歌的机器学习和大数据分析一直是走在世界前沿的,之前GoogleX做的人工大脑识别YouTube猫脸项目就让我有一种看到天网的感觉。虽然官方没有明说,但应该当时用的就会是这套tensorflow系统做的机器学习(当然可能是一个单独的扩展版本)。
所以这次开放的库是非常有价值的,特别是对它的竞争者和同行而言。
那么它为什么会选择开源呢?
其实现在我想明白了,这事儿也不是那么玄乎,估计也没有什么阴谋。阳谋倒是可能会有。
简单来说,这样可以吸引人才。如果这个库真好用,以后所有学校里都用这个来教学,学出来的同志们毕业以后,对于谷歌来说,就是直接可以用的人才了,省去了企业内部培训的烦恼。
这事儿我是从自己招人带人总结出来的。现在要是我可以跟学校合作,让某个学校教学就只教我们公司用到技能(J2EE、SSH、myBatis……),那么我的招牌成本和培训成本会降低很多很多。
而谷歌还不是只和几家学校合作,它是想一下把所有的学校都给占了。就和以前(现在其实也有)的浏览器之争,一切一切的核心都在“标准”两个字上面、
另外一个原因我觉得就是谷歌也很看重开源社区的能量。它估计是安卓市场尝到甜头了。不过话又说回来,谷歌一直是很有开源精神的,比某种水果公司好多了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。5214人阅读
TensorFlow(3)
直接访问:
对机器学习感兴趣的小伙伴请关注微信公众号:
下面的方案已经行不通了,原因你们猜!
&&&&&& 相信很多搞深度学习的小伙伴最近都为访问不了
而苦恼吧!虽然网上也给出了一些方法,但是却缺少一个很重要的步骤。接下来,我就给大家讲解一个完整的过程,大牛绕过。
1、更改Hosts
&&&&&&在Windows的host文件(位置在C:\Windows\System32\drivers\etc\hosts)末尾添加如下内容:
#TensorFlow start
64.233.188.121 www.tensorflow.org
#TensorFlow end
2、刷新DNS缓存
&&&&&& 打开cmd,输入如下命令(这一步是所有网上教程都缺少的一步,导致修改host文件无效的主要原因):
ipconfig /flushdns
接着访问www.tensorflow.org,就能打开主页了。
注意:第一次可能由于DNS解析的原因,导致打开网页速度很慢,但是只要第一次打开后,接下来的速度就会比较快了。
有任何问题,加微信聊
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:145692次
积分:3336
积分:3336
排名:第10820名
原创:85篇
评论:765条
阅读:7706
阅读:6743
阅读:2748
阅读:1964
文章:33篇
阅读:96771
(6)(5)(4)(5)(7)(7)(7)(4)(11)(27)(11)(1)}

我要回帖

更多关于 tensorflow 访问不了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信