训练准确性和验证准确性

时间:2019-07-22 07:45:17

标签: python

我正在尝试创建一个神经网络,使用Keras将数据分类为3类。 我总共有3个班级,每个班级大约有1800个样本。

问题是训练的准确性和验证准确性在第一个时期后为1,并且相应的损失也非常低。

我尝试更改参数,例如图层,纪元,批处理大小...全部无效。我假设我会在训练数据和测试数据中混合使用标签信息,因此可以对测试数据进行100%的预测。但是我不知道是哪个步骤引起的,还是有其他原因。

dataset1 = dataset100.reshape((1737, 14*11))
dataset2 = dataset175.reshape((2000, 14*11))
dataset3 = dataset250.reshape((1857, 14*11))

label1 = np.zeros(dataset1.shape[0], )
label2 = np.ones(dataset2.shape[0], )
label3 = 2 * np.ones(dataset3.shape[0], )


data = np.vstack((dataset1, dataset2, dataset3))
label = np.hstack((label1, label2, label3))
all = np.zeros((5594, 155))
all[:,:154] = data
all[:, 154] = label

np.random.shuffle(all)

x_train = all[:4000, :154]
x_test = all[4000:, :154]
y_train = all[:4000, 154]
y_test = all[4000:, 154]

x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = y_train[:1000]
partial_y_train = y_train[1000:]

y_test = to_categorical(y_test)
y_val = to_categorical(y_val)
partial_y_train = to_categorical(partial_y_train)



model = models.Sequential()
model.add(layers.Dense(64, activation="relu", input_shape=(11*14,)))
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(3, activation="softmax"))

model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(partial_x_train,
                    partial_y_train,
                    epochs=20,
                    batch_size=32,
                    validation_data=(x_val, y_val))

# plotting the training and validation loss
history_dict = history.history
loss_values = history_dict["loss"]
val_loss_values = history_dict["val_loss"]

epochs = range(1, len(loss_values) + 1)
plt.plot(epochs, loss_values, 'bo', label='Training loss')
plt.plot(epochs, val_loss_values, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

plt.clf()
acc_values = history_dict['acc']
val_acc_values = history_dict['val_acc']

plt.plot(epochs, acc_values, 'bo', label='Training acc')
plt.plot(epochs, val_acc_values, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

results = model.evaluate(x_test, y_test)
print(results)

results_predict = model.predict(x_test)
print(results_predict)

0 个答案:

没有答案