在阅读this和this answer时,我了解到在TensorFlow2.0上使用非动态模型时,Keras将使用AutoGraph。但是现在编写一个回调来获取训练期间变量的历史记录, class TrainHistory(tf.keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.vars = []
def on_batch_end(self, batch, logs={}):
self.vars.append([v.numpy() for v in self.
我正在尝试将我的代码迁移到TensorFlow2.0,但我在使用tf.function创建显式图形时遇到了问题。特别是,给定以下模型: def new_dueling_model(name, input_size, output_size):
states = tf.keras.Input(shape=(input_size,))
h1 = tf.keras.layers.Dense(256, activation='relu')(states)
# State value function
value_h2 = tf.keras.layer
我想用梯度做一些线性代数(例如tf.matmul)。默认情况下,梯度作为张量列表返回,其中张量可能具有不同的形状。我的解决方案是将梯度重塑成一个单一的向量。这在急切的模式下工作,但是现在我想使用tf.function编译我的代码。在图形模式(tf.function)中,似乎没有办法编写一个可以“平缓”渐变的函数。
grad = [tf.ones((2,10)), tf.ones((3,))] # an example of what a gradient from tape.gradient can look like
# this works for flattening the gra
在下面的代码中,我绝对需要在GPU中执行完整的函数,而不是跳回CPU。这是因为我有4个CPU核心,但我有1200个cuda核心。从理论上讲,这是可能的,因为tensorflow feed_forwards,if语句和变量赋值可以在GPU上完成(我有NVIDIA GTX1060)。 我面临的问题是tensorflow2.0会在后端自动分配给GPU和CPU,并且没有提到它的哪些操作是兼容GPU的。当我将设备作为GPU运行以下函数时,我得到 parallel_func could not be transformed and will be staged without change. 它在GPU
我已经创建了keras函数API模型,现在我正在尝试查看它的层输出,为每一层创建子模型,每一层从原始模型的输入开始,以我选择的层结束。我不明白怎样做才是正确的,而不是
WARNING:tensorflow:11 out of the last 11 calls to
<function Model.make_predict_function.<locals>.predict_function at 0x7fb8ebc92700>
triggered tf.function retracing.
Tracing is expensive and the excessi
我正在尝试将用TensorFlow1.13编写的现有代码(使用估计器)迁移到TensorFlow2.0,但我在尝试找到等效的API来冻结和输出图形以及输出.pb文件时遇到了问题。
在TensorFlow1.13中,estimator类有一个函数export_savedmodel,它接受一个模型路径和一个serving_input_receiver_fn。我在设置serving_input_receiver_fn时遇到了麻烦,因为它似乎接受占位符。但是,当迁移到TensorFlow2.0时,尽管存在相同的API,但由于将急切执行模型设置为默认值,占位符不能在急切执行模式下工作。
def e
我一直在到处寻找这个极其简单的问题,但一无所获。我有以下代码: @tf.function
def parTest():
for i in tf.range(tf.constant(10)):
insideFunc(0,i)
@tf.function
def insideFunc(x_in,j):
for i in tf.range(tf.random.uniform([],0,1000,dtype=tf.int32)):
x_in += tf.cast(i,tf.int32)
tf.print(j)
return x_in 当我运行它
我试图使用构建在类似体系结构上的四种TensorFlow模型生成4种不同类型的预测。当我使用相同的特性四次调用model.predict()函数时,我会得到以下警告:
WARNING:tensorflow:5 out of the last 9 calls to <function Model.make_predict_function.<locals>.predict_function at 0x2b18970e88c0> triggered tf.function retracing. Tracing is expensive and the excessive n
对于一些自定义代码,我需要运行一个For循环在Tensorflow 2中动态创建一个变量(启用了急切执行模式)。(在我的自定义代码中,我写入变量的值将需要渐变,因此我希望跟踪for循环中的计算,以便可以从autodiff获得渐变)。我的代码可以工作,但速度非常慢。事实上,它比在numpy中执行相同的操作慢几个数量级。 我已经隔离了问题,并提供了一个突出显示问题的玩具代码片段。修复它将允许我修复我的自定义代码。 import numpy as np
import tensorflow as tf
import timeit
N = int(1e5)
data = np.random.rand
我一直在研究tensorflow-2.0.0 beta教程。在进阶示例中使用了一个tensorflow.keras子类。@tf.function装饰器在train_step和test_step上的存在意味着模型在graph模式下执行(不确定这是否是正确的术语,我的意思是oposite to eager模式)。如果去掉这些装饰器,我就可以直接进入模型call函数,并查看每个层的输入/输出张量,这是很整洁的。
我的问题是,是否有一种以编程方式启用/禁用@tf.function装饰器。注释掉它们以在急切模式和图形模式之间切换似乎不是特别可扩展的,但是它对于调试/学习肯定是有用的)
我需要在类方法中计算tf.Variable梯度,但是使用这些梯度在以后的某个时候,在另一种方法中更新变量。如果不使用@tf.function装饰器,我可以这样做,但使用@tf.function时会得到TypeError: An op outside of the function building code is being passed a "Graph" tensor错误。我一直在寻找对这个错误的理解,以及如何解决它,但是我发现了不足。
如果你好奇的话,我想这么做,因为我有很多不同方程中的变量。与其试图创建一个将所有变量联系在一起的单一方程,不如更容易(降低计算成本)将它们