【问题标题】:Tensorflow 2-coordinates classifierTensorflow 2坐标分类器
【发布时间】:2019-10-03 19:24:13
【问题描述】:

我是一个尝试机器学习的新手。我看到了这个 repo https://github.com/jbp261/Optimal-Classification-Model-of-BLE-RSSI-Dataset 并想复制一个类似的实验。

所以我有 2 个接收器,并且想对 Rssi 的给定值最接近哪一个进行分类。我捕获了一些训练数据并定义了区域 0(信标 1 附近)和区域 1(信标 2 附近)。

我用 keras 构建了一个模型(也尝试了一个运行良好的 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)

【问题讨论】:

  • 我让它在适当的边界下工作并将优化器更改为 SGD

标签: python tensorflow machine-learning keras classification


【解决方案1】:

我认为您希望在回归值内获得 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'])

【讨论】:

  • 它运行得不太好,我得到了 0.45 的准确度,而使用输出 sigmoid、sparse_categorical_crossentropy 和 sgd 编译器我得到了 0.85
  • @KondorKondorowski 是的。我没有关于 Rssi 你所说的输出的信息。我不确定我的理解是否正确。无论如何,如果它是 0 或 1,这不是回归问题。 sigmoid 和 sparse_categorical_crossentropy 是正确的。您提到的链接是否有更多信息?
  • @KondorKondorowski 我打开 csv 文件。是Location 标签吗?是输出吗?
  • 是位置是输出,在我的情况下,我只有 2 个可能的值(layers.Dense(2))但是这个值可能会根据可能的不同位置值而有所不同
  • @KondorKondorowski “位置”只是一个字段。您是指将 2 个可能的值作为输入吗?
【解决方案2】:

在model.fit() 中添加一些验证(简单的方法是validation_split=0.5 或您想要拆分的任何百分比。)这会获取您的一些数据,将其与训练数据分开,并且仅在 epoch 结束后使用它来查看网络正在处理它以前从未见过的数据。这样您将看到损失、准确性、和validation_loss和validation_accuracy。后两者更好地反映了模型在实际使用中的表现。

一旦您开始使用该指标,您就可以查看您是否过度拟合,或者您对网络所做的更改是否真的有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多