Tensorflow concat во время тренировки различной формы - PullRequest
1 голос
/ 20 марта 2020

Привет, ребята, я буду рассказывать о том, как объединить тензорный объект с собственным тензорным объектом определения во время обучения, я тренирую модель автоэнкодера.

это мой код:

def IFFT(sig, name=None):

    nol = tf.zeros([1,12],tf.complex64)
    pv = tf.fill([1,8],3+3j)
    pv = tf.cast(pv,dtype=tf.complex64)
    nol = tf.expand_dims(pv,axis=1)
    pv = tf.expand_dims(pv,axis=1)
    return Lambda(lambda x : tf.ifft(tf.concat([nol,x,pv,nol],axis=-1)), name=name, output_shape=(1,64))(sig)

во время выполнения этого кода у меня появляется ошибка

InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,1,12] vs. shape[1] = [64,1,32]
     [[{{node 32-IFFT/concat}}]]
     [[{{node loss/add}}]]

кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 23 марта 2020

Один из способов обработки пакетов - создать переменную с именем BATCH_SIZE и вручную ввести желаемый размер пакета ваших данных . Обычно это делается, если вы выполняете пользовательские операции, в которых размер пакета None может не сработать, или вам нужен больший контроль над данными.

Я воспроизвел ваш код и предположил форма вашей переменной X (1, 32), поскольку она не включена в ваш фрагмент кода.

import tensorflow as tf
print('TensorFlow Version : {}'.format(tf.__version__)) # Using TensorFlow 2.1.0

BATCH_SIZE = 64

nol = tf.zeros([BATCH_SIZE,1,12],tf.complex64)
pv = tf.fill([BATCH_SIZE,1,8],3+3j)
pv = tf.cast(pv,dtype=tf.complex64)

#Assuming your data X based on your error
x = tf.zeros([BATCH_SIZE,1,32],tf.complex64)

# Verification 1
tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)) 

# Verification 2
tf.keras.layers.Lambda(lambda x : tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)), output_shape=(1,64))(x) 

Это распространенный подход при работе с пакетных данных , так как на проще ссылаться и быть более последовательным по всему коду.


Модифицированный код:

BATCH_SIZE = 64

def IFFT(sig, name=None):

    nol = tf.zeros([BATCH_SIZE,1,12],tf.complex64)
    pv = tf.fill([BATCH_SIZE,1,8],3+3j)
    pv = tf.cast(pv,dtype=tf.complex64)

    return Lambda(lambda x : tf.ifft(tf.concat([nol,x,pv,nol],axis=-1)), name=name, output_shape=(1,64))(sig)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...