adapt icon indicating copy to clipboard operation
adapt copied to clipboard

Could Adapt accept multi-shape input?

Open HoraceLiu1010 opened this issue 1 year ago • 0 comments

I am building a tensorflow model for regression with multi-inpout. the first input is a 50*3 sequence feature, and the other input is a float tensor. The base model:

input_seq = Input(shape=(50, 3)) # the first input
lstm1 = LSTM(64, return_sequences=True)(input_seq)
lstm2 = LSTM(32)(lstm1)
dense1 = Dense(32, activation='relu')(lstm2)
input_float = Input(shape=(1,)) # the second input
dense2 = Dense(16, activation='relu')(input_float)
concatenated = Concatenate()([dense1, dense2])
dense3 = Dense(8, activation='relu')(concatenated)
dense4 = Dense(1)(dense3)
model = Model(inputs=[input_seq, input_float], outputs=dense4)

The base model can be trained. But the model with Adapt can not be trained:

model_DA = DANN(model,
                optimizer=tf.keras.optimizers.Adam(),
                lambda_=1.0)
model_DA.fit([x_seq_train,x_float_train], y_train, [x_seq_tar, x_float_tra], batch_size=32, epochs=20)

AttributeError: 'list' object has no attribute 'shape'

I tried to set encoder/task manually:

input_seq = Input(shape=(50, 3)) # the first input
lstm1 = LSTM(64, return_sequences=True)(input_seq)
lstm2 = LSTM(32)(lstm1)
dense1 = Dense(32, activation='relu')(lstm2)
encoder = Model(inputs=[input_seq], outputs=dense1)
input_float = Input(shape=(1,))  # the second input
encoder_output = Input(shape= encoder.layers[-1].output_shape[1:] ) 
dense2 = Dense(16, activation='relu')(input_float)
concatenated = Concatenate()([dense2, encoder_output])
dense3 = Dense(8, activation='relu')(concatenated)
dense4 = Dense(1)(dense3)
task = Model(inputs=[input_float, encoder_output], outputs=dense4)
model_DA = DANN(encoder, task, lambda_=0.05, random_state=1, optimizer=Adam(learning_rate=0.0002,decay=1e-6))

If I use '[ ]' to set the input: model_DA.fit([x_train,C_train], y_train, [x_test, C_train], batch_size=32, epochs=20)

AttributeError: 'list' object has no attribute 'shape'

Or if I use '( )' to set the input: model_DA.fit((x_train,C_train), y_train, (x_test, C_train), batch_size=32, epochs=20)

`ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (2, 148534) + inhomogeneous part.

Please let me know if this error is caused by the coding mistake.

HoraceLiu1010 avatar Dec 03 '24 08:12 HoraceLiu1010