有没有办法随机洗牌一个keras层?

2024-09-27 21:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

但是是4D数据,我的数据是1D

如果问题需要NN,我想随机洗牌this toy network的输入

我试着对输入进行预处理

    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层


Tags: 数据功能nonelayerinputlayers模式nn
2条回答

我能想到的最好的办法是:

import tensorflow as tf

inp = tf.reshape(tf.range(1, 11), (2, 5))

inputlayer = tf.keras.layers.Input(shape=(5,))
out = tf.keras.layers.Lambda(lambda x: tf.map_fn(lambda y:
    tf.random.shuffle(y), x))(inputlayer)
model = tf.keras.Model(inputlayer, out)

model(inp)

由此:

<tf.Tensor: shape=(2, 5), dtype=int32, numpy=
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])>

为此:

<tf.Tensor: shape=(2, 5), dtype=float32, numpy=
array([[ 4.,  1.,  5.,  3.,  2.],
       [10.,  6.,  9.,  8.,  7.]], dtype=float32)>

您可以将几乎任何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.shuffleshufle沿着第一个维度。在培训时,这将是批次维度。要在批处理中洗牌数据而不是样本,可以简单地使用tf.transpose来“重命名”轴

相关问题 更多 >

    热门问题