
Input to reshape is a tensor with 3600 values
说的是你计算的张量最多3600个值
but the requested shape has 10800
但是你问题的要求是10800个值
这个问题一般出现在cpu读取的时候数据多大,你应该是没有GPU 造成的。
解决方式有2个:
1:减少你的张量值 缩减到3600以内
2:在GPU环境下运行(你的GPU的也要能容纳10800的值才行)
你调用reshape函数时,要求人家转成[128,128,3], 即输入张量得有128x128x3=49152个值,而你实际传进去的image只有16384个值,无法把它转成[128,128,3]的形状。所以报错了。
打开终端
运行下面的命令来启用TensorFlow source activate tensorflow
现在我们已经进入了TensorFlow的环境,我们要在这个环境中安装iPython和jupyter,运行下面的命令conda install ipython以及conda install jupyter
下面的步骤基本上按照Using a virtualenv in an IPython notebook中的进行,只是多加了一点内容。首先运行下面的命令,ipython kernelspec install-self --user,我这里得到的结果是Installed kernelspec python3 in /Users/charliebrummitt/Library/Jupyter/kernels/python3
运行下边的命令mkdir -p ~/ipython/kernels
然后运行下边的命令,使用你选择的名字来代替<kernel_name>(我使用的tfkernel),并且使用第4步中得到的路径(例如,~/local/share/jupyter/kernels/pythonX)来替换下方命令中的第一个路径。mv ~/local/share/jupyter/kernels/pythonX ~/ipython/kernels/<kernel_name>
现在,打开Jupyter Notebook,选择Kernel -> Change kernel,你将看到一个新的kernel。但是,新的kernel与你之前的kernel拥有相同点名字,运行下边的命令,给你的新kernel起一个不同的名字。cd ~/ipython/kernels/tfkernel/。接着,运行vim kerneljson来编辑kerneljson文件,将"display_name"中的默认值Python 3替换为你的新名字,然后保存,并退出。
打开一个新的Jupyter Notebook,输入一行import tensorflow as tf并运行,如果没有出现任何错误,那么就搞定了。
基本使用
使用 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 是
numpy 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 构造器可以为其增加节点 这个默认图对
许多程序来说已经足够用了 阅读 Graph 类 文档
来了解如何管理多个图
import tensorflow as tf
# 创建一个常量 op, 产生一个 1x2 矩阵 这个 op 被作为一个节点
# 加到默认图中
#
# 构造器的返回值代表该常量 op 的返回值
matrix1 = tfconstant([[3, 3]])
# 创建另外一个常量 op, 产生一个 2x1 矩阵
matrix2 = tfconstant([[2],[2]])
# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入
# 返回值 'product' 代表矩阵乘法的结果
product = tfmatmul(matrix1, matrix2)
默认图现在有三个节点, 两个 constant() op, 和一个matmul() op 为了真正进行矩阵相乘运算, 并得到矩阵乘法的
结果, 你必须在会话里启动这个图
在一个会话中启动图
构造阶段完成后, 才能启动图 启动图的第一步是创建一个 Session 对象, 如果无任何创建参数,
会话构造器将启动默认图
欲了解完整的会话 API, 请阅读Session 类
# 启动默认图
sess = tfSession()
# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出
#
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入 op 通常是并发执行的
#
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行
#
# 返回值 'result' 是一个 numpy `ndarray` 对象
result = sessrun(product)
print result
# ==> [[ 12]]
# 任务完成, 关闭会话
sessclose()
Session 对象在使用完后需要关闭以释放资源 除了显式调用 close 外, 也可以使用 "with" 代码块
来自动完成关闭动作
with tfSession() as sess:
result = sessrun([product])
print result
在实现上, TensorFlow 将图形定义转换成分布式执行的 *** 作, 以充分利用可用的计算资源(如 CPU
或 GPU) 一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测 如果检测到 GPU, TensorFlow
会尽可能地利用找到的第一个 GPU 来执行 *** 作
如果机器上有超过一个可用的 GPU, 除第一个外的其它 GPU 默认是不参与计算的 为了让 TensorFlow
使用这些 GPU, 你必须将 op 明确指派给它们执行 withDevice 语句用来指派特定的 CPU 或 GPU
执行 *** 作:
with tfSession() as sess:
with tfdevice("/gpu:1"):
matrix1 = tfconstant([[3, 3]])
matrix2 = tfconstant([[2],[2]])
product = tfmatmul(matrix1, matrix2)
设备用字符串进行标识 目前支持的设备包括:
"/cpu:0": 机器的 CPU
"/gpu:0": 机器的第一个 GPU, 如果有的话
"/gpu:1": 机器的第二个 GPU, 以此类推
阅读使用GPU章节, 了解 TensorFlow GPU 使用的更多信息
交互式使用
文档中的 Python 示例使用一个会话 Session 来
启动图, 并调用 Sessionrun() 方法执行 *** 作
为了便于使用诸如 IPython 之类的 Python 交互环境, 可以使用
InteractiveSession 代替
Session 类, 使用 Tensoreval()
和 Operationrun() 方法代替
Sessionrun() 这样可以避免使用一个变量来持有会话
# 进入一个交互式 TensorFlow 会话
import tensorflow as tf
sess = tfInteractiveSession()
x = tfVariable([10, 20])
a = tfconstant([30, 30])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
xinitializerrun()
# 增加一个减法 sub op, 从 'x' 减去 'a' 运行减法 op, 输出结果
sub = tfsub(x, a)
print subeval()
# ==> [-2 -1]
Tensor
TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, *** 作间传递的数据都是 tensor
你可以把 TensorFlow tensor 看作是一个 n 维的数组或列表 一个 tensor 包含一个静态类型 rank, 和
一个 shape 想了解 TensorFlow 是如何处理这些概念的, 参见
Rank, Shape, 和 Type
变量
Variables for more details
变量维护图执行过程中的状态信息 下面的例子演示了如何使用变量实现一个简单的计数器 参见
变量 章节了解更多细节
# 创建一个变量, 初始化为标量 0
state = tfVariable(0, name="counter")
# 创建一个 op, 其作用是使 state 增加 1
one = tfconstant(1)
new_value = tfadd(state, one)
update = tfassign(state, new_value)
# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 首先必须增加一个`初始化` op 到图中
init_op = tfinitialize_all_variables()
# 启动图, 运行 op
with tfSession() as sess:
# 运行 'init' op
sessrun(init_op)
# 打印 'state' 的初始值
print sessrun(state)
# 运行 op, 更新 'state', 并打印 'state'
for _ in range(3):
sessrun(update)
print sessrun(state)
# 输出:
# 0
# 1
# 2
# 3
代码中 assign() *** 作是图所描绘的表达式的一部分, 正如 add() *** 作一样 所以在调用 run()
执行表达式之前, 它并不会真正执行赋值 *** 作
通常会将一个统计模型中的参数表示为一组变量 例如, 你可以将一个神经网络的权重作为某个变量存储在一个 tensor 中
在训练过程中, 通过重复运行训练图, 更新这个 tensor
Fetch
为了取回 *** 作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor,
这些 tensor 会帮助你取回结果 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个
tensor:
input1 = tfconstant(30)
input2 = tfconstant(20)
input3 = tfconstant(50)
intermed = tfadd(input2, input3)
mul = tfmul(input1, intermed)
with tfSession() as sess:
result = sessrun([mul, intermed])
print result
# 输出:
# [array([ 21], dtype=float32), array([ 7], dtype=float32)]
需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。
Feed
上述示例在计算图中引入了 tensor, 以常量或变量的形式存储 TensorFlow 还提供了 feed 机制, 该机制
可以临时替代图中的任意 *** 作中的 tensor 可以对图中任何 *** 作提交补丁, 直接插入一个 tensor
feed 使用一个 tensor 值临时替换一个 *** 作的输出结果 你可以提供 feed 数据作为 run() 调用的参数
feed 只在调用它的方法内有效, 方法结束, feed 就会消失 最常见的用例是将某些特殊的 *** 作指定为 "feed" *** 作,
标记的方法是使用 tfplaceholder() 为这些 *** 作创建占位符
input1 = tfplaceholder(tffloat32)
input2 = tfplaceholder(tffloat32)
output = tfmul(input1, input2)
with tfSession() as sess:
print sessrun([output], feed_dict={input1:[7], input2:[2]})
# 输出:
# [array([ 14], dtype=float32)]
for a larger-scale example of feeds
如果没有正确提供 feed, placeholder() *** 作将会产生错误
MNIST 全连通 feed 教程
(source code)
给出了一个更大规模的使用 feed 的例子
以上就是关于大神在啊。tensorflow 遇到的问题全部的内容,包括:大神在啊。tensorflow 遇到的问题、tensorflow : Input to reshape is a tensor with 16384 values, but the requested shape has 49152、如何在Jupyter Notebook中使用Tensorflow等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)