Как найти значения функции потерь при обучении без учителя с помощью Autoencoder? - PullRequest
0 голосов
/ 06 мая 2020

Чтобы упростить мою историю: я пытался протестировать уменьшение размерности моих НЕМАРКИРОВАННЫХ данных с помощью метода кодировщика с использованием keras / tensorflow.

Итак, я посмотрел на inte rnet и нашел хороший код, который может быть мне полезен. Вот ссылка: https://github.com/IvanBongiorni/TensorFlow2.0_Notebooks/blob/master/TensorFlow2.0__02.01_Autoencoder_for_Dimensionality_Reduction.ipynb

Хотя, меня интересует только часть кодировщика. Итак, здесь я добавил часть этого кода в свой, но я не могу понять, как код вычисляет значения функции потерь, если я не указал никаких целей / меток. Я новичок в использовании keras / tensorflow, и значения функции потери мысли могут быть сгенерированы только в том случае, если вы укажете истинные и предсказанные метки.

data = np.random.randint(1, 100, 500)
df = pd.DataFrame({'f1':data, 'f2':data**2, 'f3':data*0.33, 'f4':data/20})

scaler = StandardScaler()
scaled_df = scaler.fit_transform(df)
scaled_df = pd.DataFrame(scaled_df, columns=['f1','f2','f3','f4'])

n_input_layer = scaled_df.shape[1]
n_encoding_layer = 1
n_output_layer = n_input_layer

# AUTOENCODER
autoencoder = tf.keras.models.Sequential([
# ENCODER
    Dense(n_input_layer, input_shape = (n_input_layer,), activation = 'elu'),    
# CENTRAL LAYER
    Dense(n_encoding_layer, activation = 'elu', name = 'central_layer'), 
# DECODER
    Dense(n_output_layer, activation = 'elu')])

n_epochs = 5000
loss = tf.keras.losses.MeanSquaredError()
optimizer = tf.optimizers.Adam(learning_rate = 0.001, decay = 0.0001, clipvalue = 0.5)

loss_history = []  # save loss improvement
for epoch in range(n_epochs):

    with tf.GradientTape() as tape:
        current_loss = loss(autoencoder(scaled_df.values), scaled_df.values)

    gradients = tape.gradient(current_loss, autoencoder.trainable_variables)    
    optimizer.apply_gradients(zip(gradients, autoencoder.trainable_variables)) 

    loss_history.append(current_loss.numpy())  # save current loss in its history

    # show loss improvement every 200 epochs
    if (epoch+1) % 200 == 0:
        print(str(epoch+1) + '.\tLoss: ' + str(current_loss.numpy()))

Может ли кто-нибудь показать мне, что мне не хватает? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...