Я пытаюсь найти мультипликативный уклон программного обеспечения для подгонки формы галактики.Для этого мы моделируем некоторые изображения из известных данных, затем применяем программное обеспечение к изображениям и видим, насколько хорошо они предсказывают данные.Чтобы найти функцию смещения, я пытаюсь использовать алгоритм регрессии машинного обучения.Идея состоит в том, чтобы подавать действительные данные, данные, предсказанные программным обеспечением, и некоторые дополнительные параметры (например, размер галактики) в нейронную сеть, чтобы затем она могла предсказывать ошибки.Проблема в том, что это не работает.
Вот как я делю данные на обучение и тестирование (df - фрейм данных, с которым я работаю):
train_data, test_data, train_target, test_target = model_selection.train_test_split(
df.drop(columns=['g']), df.g, test_size=0.3, random_state=0) #Splitting into training and testing data
Теперь я строю нейронную сеть:
def build_model():
nlayers = 1
# Initialising the ANN
model = keras.Sequential()
# Adding the input layer and the first hidden layer
model.add(keras.layers.Dense(16, activation=tf.nn.relu ,input_shape=(train_data.shape[1],)))
# Adding the hidden layers (found N = len(train_data)/(neurons*10))
for i in range(nlayers):
model.add(keras.layers.Dense(units = 16,activation=tf.nn.relu))
# Adding the output layer
model.add(keras.layers.Dense(units = 16,activation = "linear"))
model.add(keras.layers.Dense(units = 1))
opti = keras.optimizers.Nadam(0.0001)
model.compile(optimizer = opti, loss = 'mean_squared_error', metrics=['mse'])
return model
Затем я обучаю его:
EPOCHS = 20
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=20)
history = model.fit(train_data, train_target, epochs=EPOCHS, validation_split=0.2, verbose=1, callbacks=[early_stop])
Здесь вы можете увидеть, как уменьшается функция потерь
Однако, когда я прошу ее предсказать значения, происходит следующее:
test_predictions = model.predict(test_data).flatten()
plt.scatter(test_target[:1000], test_predictions[:1000])
plt.title("Is it working??")
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.axis('equal')
plt.xlim(plt.xlim())
plt.ylim(plt.ylim())
_ = plt.plot([-100, 100], [-100, 100])
plt.savefig("Predictions.png")
plt.show()
Прогнозы против истинных значений.Линия - это уравнение y = x, если бы оно работало, я ожидал бы, что значения будут около y = x
У меня нет большого опыта работы с нейронными сетями, поэтому я не знаю, если яделать что-то не так, если это просто данные, или если я должен использовать некоторые функции, о которых я не знаю.
Любая помощь приветствуется !!