Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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层的故障_Python_Machine Learning_Keras - Fatal编程技术网

Python 如何排除自定义Keras层的故障

Python 如何排除自定义Keras层的故障,python,machine-learning,keras,Python,Machine Learning,Keras,我正在使用Keras(我是初学者)创建一个模型,并编写了一个lambda函数来随机选择是否翻转初始输入层 以下是尝试执行此操作的代码段: input_global = Input(shape=(2001,1)) flipped = Lambda(lambda x: keras.backend.reverse(x, axes=1) if np.random.random() < 0.5 else x, output_shape=(input_global.shape[1], input_gl

我正在使用Keras(我是初学者)创建一个模型,并编写了一个lambda函数来随机选择是否翻转初始输入层

以下是尝试执行此操作的代码段:

input_global = Input(shape=(2001,1))
flipped = Lambda(lambda x: keras.backend.reverse(x, axes=1) if np.random.random() < 0.5 else x, output_shape=(input_global.shape[1], input_global.shape[2]))(input_global)
input_global=input(shape=(2001,1))
flipped=Lambda(Lambda x:keras.backend.reverse(x,axes=1)如果np.random.random()<0.5否则x,输出_形状=(输入_全局.shape[1],输入_全局.shape[2])(输入_全局)

我的模型编译,但是在模型定义的中间记录诸如“代码>打印(“Hello,World”)< /C>”这样的消息只导致“Hello World”被记录一次-而不是每次数据在训练期间进入模型。


我如何知道我的函数实现了我的预期目标?

在构建Keras模型时,您正在构建一个操作图,每当您通过模型运行输入时,您都在通过该操作图运行输入。换句话说,您只需构建一个模型,然后就可以根据需要多次运行输入

非Keras函数将不属于图形的一部分,包括诸如
print
np.random.random()
之类的操作。您将需要使用Keras等效项

对于
打印
,请使用该功能

对于
np.random.random
,使用函数

我认为您并不打算这样做,但因为您在自定义层中使用了
np.random.random()
,所以只有在构建模型时才会执行该操作。无论何时通过模型运行数据,它都不会运行。换句话说,该层要么只反转输入,要么只返回输入。要获得我认为您想要的随机行为,您需要使用Keras函数(即,
Keras.backend.random\u uniform
)。每次运行模型时,使用Keras函数将生成一个随机数


为了说明这一点,
np.random.random()
将在您构建模型时运行一次,本质上它将在构建时确定该层将做什么(即,它将只反转输入,或者只返回未更改的输入)<另一方面,code>keras.backend.random_uniform()在构建模型时不会生成随机数,而是向模型添加随机统一操作,因此每次数据通过模型时,将从该点的均匀分布中提取一个随机数。

您具体知道如何编辑该行吗?我试过if
keras.backend.random\u uniform((1,1))<0.5 else x
,但我认为它不喜欢if-else syntax,我找到了:
flipped=Lambda(Lambda x:tf.cond(keras.backend.random\u uniform((1,1))<0.5,Lambda:keras.backend.reverse(x,axes=1),Lambda:x),output\u shape=(input\u global.shape[2])(input\u global)
是的,看起来不错!顺便说一下,如果您刚开始使用Keras,您可能需要使用。这将使您能够访问TensorFlow团队最近正在研究的许多很酷的东西。请注意,您可以使用
keras.backend.random\u uniform([])
获取标量
keras.backend.random_uniform((1,1))
提供1x1数组。但是对于条件语句,它们都起作用。