Tensorflow教程包括使用tf.expand_dims
向张量添加"批量维度".我已经阅读了这个函数的文档,但它对我来说仍然是相当神秘的.有谁知道在什么情况下必须使用这个?
我的代码如下.我的意图是根据预测箱和实际箱之间的距离计算损失.(例如,如果predictedBin = 10
和truthBin = 7
然后binDistanceLoss = 3
).
batch_size = tf.size(truthValues_placeholder)
labels = tf.expand_dims(truthValues_placeholder, 1)
predictedBin = tf.argmax(logits)
binDistanceLoss = tf.abs(tf.sub(labels, logits))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我需要申请tf.expand_dims
到predictedBin
和binDistanceLoss
?提前致谢.
确保按照NVIDIA文档中的说明创建CUDA_HOME环境变量.
我在cuIDN v6的NVIDIA说明或NVIDIA CUDA Toolkit安装说明中找不到任何关于CUDA_HOME的提及.有谁知道如何在linux上设置这个变量?
在Google/Udemy Tensorflow教程中,有以下代码:
import tensorflow as tf
...
def read_data(filename):
"""Extract the first file enclosed in a zip file as a list of words"""
with zipfile.ZipFile(filename) as f:
data = tf.compat.as_str(f.read(f.namelist()[0])).split()
return data
Run Code Online (Sandbox Code Playgroud)
这执行得很好,但我无法compat.as_str
在Tensorflow文档或其他任何地方找到.
Q1:做compat.as_str
什么?
Q2:这个张量流compat
库是否记录在某处?
Q3:这是对tensorflow库的调用,那么它是如何以及为什么在普通的python代码中工作,而不是在张量流图中呢?即我认为tensorflow库调用必须在张量流图定义块内:
graph = tf.Graph()
with graph.as_default()
... tensorflow function calls here ...
Run Code Online (Sandbox Code Playgroud)
我正在运行python 2.7.
我在Tensorflow中使用完全连接的多层神经网络进行多元回归.(y1,y2)
给定输入向量的网络预测2个连续浮点变量(x1,x2,...xN)
,即网络有2个输出节点.有2个输出,网络似乎没有收敛.我的损失函数本质上是预测和真值向量之间的L2距离(每个包含2个标量):
loss = tf.nn.l2_loss(tf.sub(prediction, truthValues_placeholder)) + L2regularizationLoss
Run Code Online (Sandbox Code Playgroud)
我正在使用L2正则化,丢失正则化,我的激活函数是tanh.
我的问题:L2距离是计算多变量网络输出损耗的正确方法吗?是否需要一些技巧才能使多元回归网络收敛(与单变量网络和分类器相对)?
我是Python的新手.我正在调整Python 2.X中的其他人的代码到3.5.代码通过cPickle加载文件.我将所有"cPickle"事件更改为"pickle",因为我理解pickle取代了3.5中的cPickle.我得到了这个执行错误:
NameError: name 'cPickle' is not defined
Run Code Online (Sandbox Code Playgroud)
相关代码:
import pickle
import gzip
...
def load_data():
f = gzip.open('../data/mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = pickle.load(f, fix_imports=True)
f.close()
return (training_data, validation_data, test_data)
Run Code Online (Sandbox Code Playgroud)
pickle.load
当load_data()
另一个函数调用时,该行发生错误.但是,a)既没有cPickle
也cpickle
没有出现在项目中任何地方的任何源文件中(全局搜索)和b)如果我load_data()
在Python shell中单独运行行,则不会发生错误(但是,我确实得到另一个数据格式错误).正在pickle
打电话cPickle
,如果是这样,我怎么阻止它?
Shell:Python 3.5.0 | Anaconda 2.4.0(x86_64)| (默认,2015年10月20日,14:39:26)[GCC 4.2.1(Apple Inc. build 5577)]在达尔文
IDE:IntelliJ 15.0.1,Python 3.5.0,anaconda
不清楚如何进行.任何帮助赞赏.谢谢.
Numba可以用来编译与Tensorflow接口的Python代码吗?即Tensorflow宇宙之外的计算将与Numba一起运行以获得速度.我没有找到任何有关如何执行此操作的资源.
无法从六进口任何东西.这两行都会产生错误:
from six.moves.urllib.request import urlretrieve
Run Code Online (Sandbox Code Playgroud)
- > Unresolved reference "urlretrieve"
from six.moves import cPickle as pickle
Run Code Online (Sandbox Code Playgroud)
- > Unresolved reference "cPickle"
OSX 10.11.5.IntelliJ 2016.1.2,PyCharm 2016.1.3,Python 2.7.11,Six 1.10.0.
我尝试修复的内容(对于有效代码和其他帖子,每个PyCharm显示未解析的引用错误):
_
$ sudo pip install -U six
Requirement already up-to-date: six in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg
Run Code Online (Sandbox Code Playgroud)
我试过Python SDKs:
Python 2.7.11 (/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7)
Python 3.5.1 (/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5)
Python 2.7.10 (/usr/local/bin/python2.7)
Run Code Online (Sandbox Code Playgroud)
没有任何效果.欢迎帮助!谢谢.
---------- 2016年5月23日更新-------------------------------
从命令行运行"from six.moves ..."导入行不会产生错误.命令行调用Python 2.7.11.PyCharm也使用Python 2.7.11,而PyCharm也显示有六个可用 - 参见第一个屏幕截图.项目中没有.pyc文件,只有main.py.
奇怪的是,main.py在PyCharm中运行时没有错误; 打印"Hello"行(参见第二个屏幕截图).
此屏幕截图显示设置中的项目解释程序: …
我想训练我的Tensorflow模型,冻结快照,然后使用新的输入数据以前馈模式(无需进一步培训)运行它.问题:
tf.train.export_meta_graph
和tf.train.import_meta_graph
正确的工具吗?collection_list
在快照中包含我想要包含的所有变量的名称?(对我来说最简单的就是包含所有内容.)collection_list
指定,则将导出模型中的所有集合." 这是否意味着如果我没有指定变量,collection_list
那么模型中的所有变量都会被导出,因为它们位于默认集合中?to_proto()
和from_proto()
绝只添加到我已定义并希望导出的类中?如果我只使用标准的Python数据类型(int,float,list,dict)那么这是无关紧要的吗?提前致谢.
Keras受让人递增ID号相同的类型,例如层max_pooling1d_7
,max_pooling1d_8
,max_pooling1d_9
等。我的代码每次迭代构建了一个新的模式,开始model = Sequential()
,然后通过添加图层model.add()
。即使每个循环都创建了一个新的 Sequential 对象,层 ID 编号仍会从前一个循环继续递增。由于我的进程长时间运行,这些 ID 号可能会变得非常大。我担心这会导致一些问题。为什么 ID 没有被重置model = Sequential()
?有没有办法重置它们?在每个循环之后,我不再使用层 ID 号并且可以丢弃它们,但是如何呢?我正在使用 Tensorflow 后端。
我正在使用Python多重处理将任务拆分为多个进程。我的CPU有4个物理核和8个虚拟核。我希望所有内核的利用率均为100%,但是当使用4个子进程池时,我在1个内核上观察到100%,在3个内核上观察到9%multiprocessing.Manager Namespace
。子进程仅从共享名称空间读取(而不是写入)。也许共享的命名空间不允许并发读取访问-我是否需要以某种方式指定不应进行锁定?
在我的实际代码中,共享命名空间很大,包括大列表和numpy数组,因此另一个原因可能是创建它所需的时间。共享命名空间是只创建一次,还是每次创建新的子进程时都创建(假设命名空间中的数据没有变化)?
示例代码:
import multiprocessing
import worker
mgr = multiprocessing.Manager()
multiProcShared = mgr.Namespace()
multiProcShared.a = 25
multiProcShared.b = 40
multiProcShared.c = 10
pool = multiprocessing.Pool(4)
allResults = []
max = xrange(100)
for segmentNum in max:
allResults.append(pool.apply_async(worker.worker, args=(multiProcShared, segmentNum)))
Run Code Online (Sandbox Code Playgroud)
更新:我怀疑由于我正在将大数据传递给子进程,因此数据切换可能会产生大量开销。我认为数据是先腌制然后再腌制?如果是这样,那么python多处理性能是否会随着传递给子进程的数据大小而降低?是否根据数据是通过共享名称空间还是通过函数参数传递来更改?
tensorflow ×7
python ×5
cuda ×1
cudnn ×1
keras ×1
keras-layer ×1
numba ×1
numpy ×1
pickle ×1
pycharm ×1
python-3.x ×1
six ×1