Проблема с последовательностями заполнения в Keras из PyTorch - PullRequest
0 голосов
/ 27 мая 2020

Я пытался преобразовать код PyTorch для заполнения партии в Keras. Это код для многомодального анализа тональности в базе данных CMU-MOSI. Мне в основном нужно преобразовать весь исходный код https://github.com/Justin1904/CMU-MultimodalSDK-Tutorials в Keras, и поскольку я новичок в этом, для меня это борьба. Был бы очень признателен за помощь и руководство. Сразу же мне нужно дополнить все векторы функций, чтобы они были одинаковой длины друг с другом: visual, acousti c, предложения и метки.

Здесь они сделали это пакетно, сделав это на весь набор данных или разбиение набора данных также будут работать. Нужна вся возможная помощь.

*Mine(Keras)*

    def multi_collate(batch):
        '''
        Collate functions assume batch = [Dataset[i] for i in index_set]
        '''
        # for later use we sort the batch in descending order of length
        batch = sorted(batch, key=lambda x: x[0][0].shape[0], reverse=True)

        # get the data out of the batch - use pad sequence util functions from PyTorch to pad things
        labels = np.array([sample[1] for sample in batch])
        sentences = tf.keras.preprocessing.sequence.pad_sequences([sample[0][0] for sample in batch], padding=PAD)
        visual = tf.keras.preprocessing.sequence.pad_sequences([sample[0][1] for sample in batch])
        acoustic = tf.keras.preprocessing.sequence.pad_sequences([sample[0][2] for sample in batch])

        # lengths are useful later in using RNNs
        lengths = np.array([sample[0][0].shape[0] for sample in batch])
        return sentences, visual, acoustic, labels, lengths

*Original (PyTorch)*

    def multi_collate(batch):
        '''
        Collate functions assume batch = [Dataset[i] for i in index_set]
        '''
        # for later use we sort the batch in descending order of length
        batch = sorted(batch, key=lambda x: x[0][0].shape[0], reverse=True)

        # get the data out of the batch - use pad sequence util functions from PyTorch to pad things
        labels = torch.cat([torch.from_numpy(sample[1]) for sample in batch], dim=0)
        sentences = pad_sequence([torch.LongTensor(sample[0][0]) for sample in batch], padding_value=PAD)
        visual = pad_sequence([torch.FloatTensor(sample[0][1]) for sample in batch])
        acoustic = pad_sequence([torch.FloatTensor(sample[0][2]) for sample in batch])

        # lengths are useful later in using RNNs
        lengths = torch.LongTensor([sample[0][0].shape[0] for sample in batch])
        return sentences, visual, acoustic, labels, lengths
...