Tenzor concat výstupu na vstup na nové krmivo lstm vrstva

0

Otázka

Snažím se přetvářet a concat nějaký výstup, aby pokud původní vstup a použít je v další fázi svého modelu. Rozměr zdají odpovídat tomu, ale já se tuto chybu:

Concatenate(axis=2)([tensor_input2, out_first_try])
*** ValueError: A `Concatenate` layer requires inputs with matching 
shapes except for the concat axis. Got inputs shapes: [(64, 10, 8), [(), 
(), ()]]

Jsem také vyzkoušet :

tf.concat([tensor_input2, out_first_try], 2)

s touto chybou:

tf.concat([tensor_input2, out_first_try], 2)
*** ValueError: Shape must be rank 3 but is rank 1 for '{{node 
tf.concat/concat}} = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32] 
(Placeholder, tf.concat/concat/values_1, tf.concat/concat/axis)' with 
input shapes: [64,10,8], [3], [].

Příčinou se zdají být stejné, ale nemůžu přijít na to, jak se vypořádat s tím,

    # tensor_input1 = [64,365,9]
    tensor_input1 = Input(batch_size=batch, shape=(X.shape[1], 
                    X.shape[2]), name='input1')
    # tensor_input2 = [64,10,8]
    tensor_input2 = Input(batch_size=batch, shape=(X2.shape[1], 
                    X2.shape[2]), name='input2')

    extractor = CuDNNLSTM(100, return_sequences=False, 
                 stateful=False, name='LSTM1')(tensor_input2)
    extractor = Dropout(rate = .2)(extractor)
   
    extractor = Dense(100, activation='softsign')(extractor)

    out_1 = Dense(10, activation='linear')(extractor2)

    # add a dimension to out_1 [64,10] to fit tensor_input2 
    out_first_try = tf.expand_dims(out_1, axis=2).shape.as_list()

    # concat in 3d dim the output to the original input
    # tensor_input2 =[64,10,8] 
    # out_first_try, after tf.expend [64,10,1]
    forcast_input  = Concatenate(axis=2)([tensor_input2, 
                     out_first_try])

    # forcast_input expected size [64,10,9]

    # finaly concat tensor_input1, new tensor_input2 side to side
    allin_input = Concatenate(axis=1)([tensor_input1, forcast_input])
    # allin_input  expected size [64,365+10,9]

    extractor2 = CuDNNLSTM(100, return_sequences=False, 
                 stateful=False, name='LSTM1')(allin_input )
    ...
concatenation python tensor tensorflow
2021-11-23 20:12:42
1

Nejlepší odpověď

1

Zřetězení je tenzor s seznam nebude fungovat. Takže možná zkusit něco jako tohle:

out_first_try = tf.expand_dims(out_1, axis=2)
forcast_input  = Concatenate(axis=2)([tensor_input2, out_first_try])

Všimněte si, že jsem odstranil shape.as_list() protože, jak už název napovídá, vrátí se tvar tenzoru jako seznam. Můžete si ověřit, že s tímto příkladem:

import tensorflow as tf

out_1 = tf.random.normal((5, 10))
out_first_try = tf.expand_dims(out_1, axis=2).shape.as_list()
tf.print(type(out_first_try))
#<class 'list'>
2021-11-23 20:45:51

To je ono, to fungovalo dobře, Děkuji moc!
Jonathan Roy

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................