Tensorflow 2-координатный классификатор - PullRequest
1 голос
/ 16 мая 2019

Я новичок, экспериментирующий с машинным обучением. Я видел этот репо https://github.com/jbp261/Optimal-Classification-Model-of-BLE-RSSI-Dataset и хотел повторить аналогичный эксперимент.

Итак, у меня есть 2 приемника, и я хочу классифицировать, рядом с которыми заданные значения Rssi являются наиболее близкими. Я собрал некоторые тренировочные данные и определил область 0 (около маяка 1) и область 1 (около маяка 2).

Я строю модель с керасом (также пробовал с RandomForest, который работает отлично), но даже при оценке данных базовой тренировки с точностью до 0,8 я получаю 50% неправильного прогноза.

batch_size = 100

#reading the input samples and separating the input from the outputs
dataframe = pd.read_csv("C:\aaa\Log.csv")
labels = dataframe.pop('result')

#creating the dataset from the data
ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
ds = ds.batch(batch_size)

feature_columns = []
headers = dataframe.columns.tolist()

# numeric cols
for header in headers:
  temp = feature_column.numeric_column(header)
  #feature_columns.append(feature_column.bucketized_column(temp, boundaries=[-70, -60, -50, -40 , -30])) tried also this
  feature_columns.append(temp)

feature_layer = tf.keras.layers.DenseFeatures(feature_columns)

model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dense(2, activation='sigmoid')
])

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit(ds, epochs=20)


test_ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
test_ds = test_ds.batch(batch_size)

loss, accuracy = model.evaluate(test_ds)
print("Accuracy", accuracy)

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

in model.fit() добавить некоторую проверку (простой способ - validation_split=0.5 или любой другой процент, который вы хотите разделить.) Это берет некоторые ваши данные, отделяет их от обучающих данных и использует их только после окончания эпохи, чтобы увидеть, каксеть работает с данными , которых никогда не видела прежде. Таким образом вы увидите потери, точность, и validation_loss и validation_accuracy.Последние два лучше отражают, как модель будет работать в реальных условиях.

Как только вы начнете использовать эту метрику, вы увидите, насколько вы подходите, или изменения, которые вы вносите в сеть, действительно помогают или нет.

0 голосов
/ 22 мая 2019

Я думаю, вы хотите получить 2 выхода в пределах значения регрессии.

Пожалуйста, попробуйте использовать relu в качестве активации и mean_squared_error в качестве потери.

model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dense(2, activation='relu')
])

model.compile(optimizer='adam',
              loss='mean_squared_error',
              metrics=['accuracy'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...