【发布时间】:2020-09-16 22:34:40
【问题描述】:
我的项目是尝试找出我是否可以根据陀螺仪和加速度计的数据预测在电话附近说话的人的性别。我有 315 个示例(每个示例 60 秒),每个示例有 2997 条线,其中每条线代表来自陀螺仪/加速度计 xyz 轴的矢量幅度。
我用相同的种子对输入和输出进行了混洗,并对输入数据进行了标准化。我在 60|20|20 上拆分数据。在这个测试中,我尝试从加速度计看是否有男性说话,所以输出是二进制的。
当我使用当前模型训练数据时,有时我得到的准确率高达 0.68 和低至 0.36,而损失几乎总是在 0.69 左右。我在 for 循环中运行了 10 次,平均准确率为 0.5,损失为 0.69。
第一个问题是我尝试了多种类型的模型、学习率、优化算法等,但平均而言我不太成功。我应该尝试循环神经网络吗?在哪里可以学习?
第二个问题是,如果我以 68% 的准确率训练模型,即使我知道平均值为 50%,是否可以说该模型的准确率为 68%?
model = tf.keras.Sequential()
model.add(layers.Dense(512, activation='relu',input_shape = (2997,), kernel_regularizer=regularizers.l2(0.001)))
model.add(layers.Dropout(0.5))
for j in range(10) :
model.add(layers.Dense(1024, activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))
lr_schedule = tf.keras.optimizers.schedules.InverseTimeDecay(
0.001,
decay_steps=200,
decay_rate=1,
staircase=True)
callbacks = [
tf.keras.callbacks.EarlyStopping(
monitor='val_loss', patience = 20
)
]
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate = lr_schedule),
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics = ['accuracy'])
history = model.fit(
train_vector_examples,
train_vector_labels,
validation_split = 0.25,
epochs =80,
callbacks=callbacks,
verbose=0,
shuffle=False
)
loss1, accuracy = model.evaluate(test_vector_examples, test_vector_labels)
【问题讨论】:
-
“第二个问题是,如果我以 68% 的准确率训练模型,即使我知道平均值为 50%,是否可以说模型的准确率为 68%?”当你知道平均工资是 3k 时,可以说你的工资是 4k 吗?这样做没有意义,不是吗?
-
但这不是很好的类比。如果输出模型显示它具有 68% 的准确度,则意味着它应该具有基于 val 和测试集的准确度。在下一次迭代中,它可以以不同的方式随机化权重并获得不同的准确度。在我拟合模型之后,它不像“薪水”类比那样独立。
标签: python tensorflow machine-learning keras