首页 > 解决方案 > 有一种方法可以随机打乱 keras 层吗?

问题描述

我想在 keras NN(功能模式)的第一层添加一维输入数据的随机洗牌。

那可能吗?如果不可能,随机翻译将是第二好的。

我发现 keras 实现 了 keras.layers.experimental.preprocessing.RandomTranslation

但适用于 4D 数据,而我的数据是 1D

如果问题需要神经网络,我想随机打乱这个玩具网络的输入。

我试图用

    input_layer = keras.layers.Input(input_shape)
    randomTranslation=keras.layers.experimental.preprocessing.RandomTranslation(\
        height_factor=1, width_factor=1, fill_mode='wrap',\
        interpolation='nearest', seed=None, name=None)

    input_layer=randomTranslation(input_layer)

但我收到错误“形状必须为 4 级但为 3 级”

Tensorflow 实现了 tf.random.shuffle,但是不知道能不能变成keras层。

标签: pythontensorflowkeras

解决方案


您可以将几乎任何 TF 函数变成 lyaer。对于功能模型和您的案例,假设您的输入是input. 然后您可以执行以下操作:

input_transposed = tf.transpose(input, perm=[1,0])
input_shuffled_transposed = tf.random.shuffle(input_transposed)
input_shuffled = tf.transpose(input_shuffled_transposed, perm=[1,0])

需要第一个命令作为tf.random.shuffle沿第一个维度的随机播放。在训练时,这将是批量维度。要对批处理中的数据而不是样本进行洗牌,可以简单地使用tf.transpose“重命名”轴。


推荐阅读