How to solve " AttributeError: 'KerasTensor' object has no attribute '_id' "?

Viewed 1639

I was training a network using RSS data. The network is trained after preprocessing the data. But I am getting the error :

AttributeError: 'KerasTensor' object has no attribute '_id'

My model is shown below.

class DANN(Model):
    def __init__(self):
        super().__init__()

        #Feature Extractor
        self.feature_extractor_layer0 = Input(shape=(num_batch, num_features))
        self.feature_extractor_layer1 = Dense(100, activation='relu')
        self.feature_extractor_layer2 = Dense(100, activation='relu')

        self.feature_extractor_layer3 = Dense(100, activation='relu')
        self.feature_extractor_layer4 = Dropout(0.5)
        self.feature_extractor_layer5 = Dense(100, activation='relu')
        self.feature_extractor_layer6 = Dense(100, activation='relu')
        
        #Label Predictor
        self.label_predictor_layer0 = Dense(100, activation='relu')
        self.label_predictor_layer1 = Dense(100, activation='relu')
        self.label_predictor_layer2 = Dense(2, activation=None)

    def call(self, x):
        #Feature Extractor
        x = Input(shape=(num_features,))
        x = self.feature_extractor_layer1(x)
        x = self.feature_extractor_layer2(x)
        
        x = self.feature_extractor_layer3(x)
        x = self.feature_extractor_layer4(x)
        x = self.feature_extractor_layer5(x)
        x = self.feature_extractor_layer6(x)

        label_pred = self.label_predictor_layer0(x)
        label_pred = self.label_predictor_layer1(label_pred)
        label_pred = self.label_predictor_layer2(label_pred)
    
        return label_pred

#creating a model object

model = DANN()

My training loop is,

#initializing parameters before training the model

lr = 1e-3
optimizer = tf.optimizers.SGD()

loss_fn_label = keras.losses.mean_squared_error

max_batches = len(dx_source)
source_label_loss = []

#training loop
for epoch in range(num_epochs):
    print("\nStart of epoch %d" % (epoch,))

    for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):

        with tf.GradientTape() as tape:

            logits = model(x_batch_train, training=True)  # Logits for this minibatch

            loss_value = loss_fn_label(y_batch_train, logits)


        grads = tape.gradient(loss_value, model.trainable_weights)

        optimizer.apply_gradients(zip(grads, model.trainable_weights))

        while ep == ls[ls_i]:
          sys.stdout.write("█")
          ls_i = ls_i+1
          break
        ep = ep+1
  
    sys.stdout.write("|")
  
    print(f'\ts_label_loss: {loss_s_label:.4f}')
    
    source_label_loss.append(loss_s_label)

Please help me to solve his error.

dx_source_tensor = tf.convert_to_tensor(X_train_source, dtype=tf.float32)
dy_source_tensor = tf.convert_to_tensor(Y_train_source, dtype=tf.float32)

train_dataset_source = tf.data.Dataset.from_tensor_slices((dx_source_tensor, dy_source_tensor))

dx_source_test_tensor = tf.convert_to_tensor(X_test_source, dtype=tf.float32)
dy_source_test_tensor = tf.convert_to_tensor(Y_test_source, dtype=tf.float32)

test_dataset_source = tf.data.Dataset.from_tensor_slices((dx_source_test_tensor, dy_source_test_tensor))

#training dataset

train_source = tf.data.Dataset.from_tensor_slices(train_dataset_source).batch(num_batch)
 
#testing dataset
 
test_source = tf.data.Dataset.from_tensor_slices(test_dataset_source).batch(num_batch)

This is how I have given the dataset input. This code was working for the MNIST dataset. But not showing the result for a normal row-by-row data frame. If you know any other methods to train these types of models. That is also acceptable for me. Thank you!

0 Answers
Related