我只是学习使用TensorFlow的tf.dataAPI,而且我发现它使我的代码速度下降了很多,按时间计算.我想,这与它应该做的相反.我写了一个简单的线性回归程序来测试它.
Tl; Dr:tf.data如果您正在使用完整的批次培训,则使用100,000个训练数据,将每个时期的时间减少大约十倍.如果你使用较小的批次更糟糕.500个训练数据则相反.
我的问题:发生了什么事?我的实施有缺陷吗?我读过的其他消息来源的tf.data速度提高了大约30%.
import tensorflow as tf
import numpy as np
import timeit
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.logging.set_verbosity(tf.logging.ERROR)
n_epochs = 10
input_dimensions_list = [10]
def function_to_approximate(x):
return np.dot(x, random_covector).astype(np.float32) + np.float32(.01) * np.random.randn(1,1).astype(np.float32)
def regress_without_tfData(n_epochs, input_dimension, training_inputs, training_labels):
tf.reset_default_graph()
weights = tf.get_variable("weights", initializer=np.random.randn(input_dimension, 1).astype(np.float32))
X = tf.placeholder(tf.float32, shape=(None, input_dimension), name='X')
Y = tf.placeholder(tf.float32, shape=(None, 1), name='Y')
prediction = tf.matmul(X,weights)
loss = tf.reduce_mean(tf.square(tf.subtract(prediction, Y)))
loss_op = tf.train.AdamOptimizer(.01).minimize(loss)
init = tf.global_variables_initializer()
with …Run Code Online (Sandbox Code Playgroud) 如果我上课
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
Run Code Online (Sandbox Code Playgroud)
然后在控制台中说
x=MyClass()
x.counter = 1
vars(x) # returns {'counter': 1}
x.__dict__ # returns {'counter': 1}
Run Code Online (Sandbox Code Playgroud)
为什么不知道x的i属性?我确信这是因为我对我在Python中如何定义类的各种属性的误解.
在这方面,Python 2/3之间有什么区别吗?打电话dir(x)给了我所有我期望的东西.
我怀疑其他初学者已经问过这个问题,但在这个阶段我不知道在问题标题中寻找正确的事情.网站建议的所有内容都不正确.
在 NumPy 中,我知道切片数组会给你一个“视图”,在我看来这与浅拷贝完全相同。它们有何不同?
我写
import tensorflow as tf
x = tf.Session()
x.as_default().__enter__()
print(tf.get_default_session()) # prints "None"
Run Code Online (Sandbox Code Playgroud)
为什么我没有完成让x成为默认会话的任务?我知道我可以在“ with”块中执行此操作,但是我想知道为什么这不起作用。
请注意,如果我写
import tensorflow as tf
with tf.Session().as_default():
print(tf.get_default_session()) # shows <tensorflow.python.client.session.Session object at 0x114217a90>
Run Code Online (Sandbox Code Playgroud)
这两段代码如何做不同的事情?
另外,如果我只是写
import tensorflow as tf
tf.Session()
Run Code Online (Sandbox Code Playgroud)
那会不会创建一个我无法关闭的无名会话,所以它将一直运行直到重启内核?有没有办法检查当前打开的会话?
我正在将一个参数传递给一个函数,以便我想以通常的方式延迟给出默认参数:
def f(x = None):
if x == None:
x = ...
Run Code Online (Sandbox Code Playgroud)
唯一的问题是x可能是一个numpy数组.然后x == None返回一个布尔数组,我无法调整.编译器建议使用.any()或.all()
但如果我写
def f(x = None):
if (x == None).any():
x = ...
Run Code Online (Sandbox Code Playgroud)
如果x转到其默认值,这将无效,因为这None == None是一个布尔,没有.any()或.all()方法.我的举动是什么?
假设我想iterate step x0在 Haskell 中构建一个列表,但具有包含终止条件。所以在Python中这将是list(my_gen)例如
def my_gen():
x = x0
while not done(x):
x = step(x)
yield x
Run Code Online (Sandbox Code Playgroud)
(编辑:如果我想包含,这应该yield x在循环之前有一个额外的x0。)
一种方法是编写我自己的takeWhileInclusive并说
takeWhileInclusive (not . done) . iterate step x0
Run Code Online (Sandbox Code Playgroud)
这是实现此目的的Haskell-y 方式(或Haskell -y 方式)吗?step x尝试为何时为真添加一些哨兵值done x然后使用似乎不自然takeWhile。
特别是我正在考虑LeetCode上水问题最多的容器,并用类似的方法解决它
maxWith volume . smartSteps (0, n)
where smartSteps = takeWhileInclusive (\(i,j) -> j - i > 1) . iterate step
Run Code Online (Sandbox Code Playgroud)
并step增加i …
考虑以下 Python 函数,给定节点的后继者,该函数访问它们并收集结果。(实际上,这个逻辑将构成递归visit函数的一部分。)
from typing import Any, Callable, Tuple, List, Set
Node_key = Any
Discovered = Set[Node_key]
Result = Any
def get_successor_results(visit: Callable[[Discovered, Node_key],
Tuple[Discovered, Result]],
successors: List[Node_key],
disc: Discovered) -> List[Result]:
results = []
for succ in successors:
if succ not in disc:
disc, result = visit(disc, succ)
results.append(result)
return results
Run Code Online (Sandbox Code Playgroud)
(就上下文而言,这将是 df-traverse 函数的一部分,给定一个图和一个函数,该函数combiner :: Node_key -> [Result] -> Result相当于构建深度优先森林并调用fold-tree combiner每棵树。)
我的问题:你会如何用
get_successor_resultsHaskell 写作?
一些想法:
get-successor-results visit successors disc =
reverse …Run Code Online (Sandbox Code Playgroud) 这是这个问题的重复。调试时,似乎无法在Python的变量资源管理器中查看类的实例。
那里的答案声称这已解决,所以我想知道自己在做错什么。
寻找一种告诉pylint忽略下一行错误的方法。JavaScript的方法在这里给出,只是
// @ts-ignore
Run Code Online (Sandbox Code Playgroud)
我为Python尝试了一些逻辑上的变体,但没有成功。
for是flip traverse。
forM是flip mapM。
依此类推for_,等等。
关于什么foldMap?很孤独。
flip foldMap = ?