Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras Tensorflow自定义层仅调用一次_Python_Tensorflow_Keras_Tensorflow2.0_Keras Layer - Fatal编程技术网

Python Keras Tensorflow自定义层仅调用一次

Python Keras Tensorflow自定义层仅调用一次,python,tensorflow,keras,tensorflow2.0,keras-layer,Python,Tensorflow,Keras,Tensorflow2.0,Keras Layer,经过两天的紧张搜索,我在keras文档/一堆文档中没有找到答案 我正在尝试创建一个自定义层,以某种概率对每个批次执行增强(现在演示1)。 数据是具有一个通道的图像 我需要一种方法来知道增强功能是否在训练时实际发生,因为增强功能中的打印只在定义网络时发生一次,在激活fit功能时发生另一次 任何帮助都将不胜感激,谢谢 基本可运行工作示例,请注意call()中的打印数: 从tensorflow.keras.layers导入输入、密集、Conv2D、展平 从tensorflow.keras.models

经过两天的紧张搜索,我在keras文档/一堆文档中没有找到答案

我正在尝试创建一个自定义层,以某种概率对每个批次执行增强(现在演示1)。 数据是具有一个通道的图像

我需要一种方法来知道增强功能是否在训练时实际发生,因为增强功能中的打印只在定义网络时发生一次,在激活
fit
功能时发生另一次

任何帮助都将不胜感激,谢谢

基本可运行工作示例,请注意
call()
中的打印数:

从tensorflow.keras.layers导入输入、密集、Conv2D、展平
从tensorflow.keras.models导入顺序
随机输入
将numpy作为np导入
导入tensorflow作为tf
从tensorflow.keras导入优化器
#自定义增强层
类增强层(tf.keras.layers.Layer):
定义初始化(self,p):
超级(增强层,自我)。\uuuu初始化
self.p=p
def呼叫(自我、输入、培训=无):
如果不是培训:
返回输入
打印('输入自定义图层调用,训练=',训练)
如果random.random()
如果使用
tf.print()
它在图形执行中运行时也会打印。您可以在这里了解更多信息:。

对于将来的人,我将补充一点,在编译模型时,有一个默认值,用于防止从自定义层内部运行某些函数(这就是为什么常规print()不起作用),以提高性能。其中包括:print()、np.save()以及更多

model.compile(..., run_eagerly=False)   # default
如果要启用上述所有功能,请使用以下工具编译模型:

model.compile(..., run_eagerly=True) 

层被调用一次,以构建由TensorFlow创建的计算图。这正是我所寻找的!当我使用tf.print()时,消息被打印到我预期的标准输出中-在每个批次。非常感谢。
model.compile(..., run_eagerly=True)