【发布时间】:2019-12-06 09:43:55
【问题描述】:
我们的 val_loss 和 val_acc 存在一些问题。在几个 epoch(大约 30 个)之后,val_acc 下降到 50-60% 左右,而 val_loss 增加到 0.98 - 1.4 之间(见下图)。文章最后是第45个纪元的结束。
import pickle
from datetime import time
import matplotlib.pyplot as plt
import numpy as np
import tf as tf
from keras import optimizers
from keras.models import Sequential
from keras.layers import *
from keras.callbacks import TensorBoard
from keras.utils import np_utils
pickle_in = open("X.pickle", "rb")
X = pickle.load(pickle_in)
pickle_in = open("y.pickle", "rb")
y = pickle.load(pickle_in)
pickle_in = open("PredictionData\\X_Test.pickle", "rb")
X_Test = pickle.load(pickle_in)
X = X/255.0
X_Test = X_Test/255.0
y = np_utils.to_categorical(y, 5)
NAME = "Emotion Detection"
model = Sequential()
model.add(Conv2D(32, (1, 1), activation="relu", use_bias=True,
bias_initializer="Ones",
input_shape=(145, 65, 1),
dim_ordering="th"))
model.add(Conv2D(64, (3, 3),
activation="relu"))
model.add(Conv2D(128, (3, 3),
activation="relu"))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3),
activation="relu"))
model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(128,
activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(32,
activation="relu"))
model.add(Dense(5,
activation='sigmoid'))
tensorboard = TensorBoard(log_dir="Tensorboard\\".format(time))
sgd = optimizers.SGD(lr=0.001, decay=1e-6,
momentum=0.9, nesterov=True)
model.compile(loss="categorical_crossentropy",
optimizer=sgd,
metrics=['accuracy'])
history = model.fit(X, y, batch_size=16,
epochs=45, validation_split=0.12,
callbacks=[tensorboard])
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Accuracy', 'Val_Accuracy'], loc='upper left')
plt.show()
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Loss', 'Val_Loss'], loc='upper left')
plt.show()
classes = model.predict(X_Test)
plt.bar(range(5), classes[0])
plt.show()
print("prediction: class", np.argmax(classes[0]))
model.summary()
model.save("TrainedModel\\emotionDetector.h5")
2493/2493 [===============================] - 35 秒 14 毫秒/步 - 损失:0.2324 - 准确度: 0.9202 - val_loss:1.3789 - val_accuracy:0.6353
_________________________________________________________________
Layer (type) Output Shape Param
=================================================================
conv2d_1 (Conv2D) (None, 32, 65, 1) 4672
_________________________________________________________________
conv2d_2 (Conv2D) (None, 30, 63, 64) 640
_________________________________________________________________
conv2d_3 (Conv2D) (None, 28, 61, 128) 73856
_________________________________________________________________
dropout_1 (Dropout) (None, 28, 61, 128) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 26, 59, 64) 73792
_________________________________________________________________
flatten_1 (Flatten) (None, 98176) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 12566656
_________________________________________________________________
dropout_2 (Dropout) (None, 128) 0
_________________________________________________________________
dense_2 (Dense) (None, 32) 4128
_________________________________________________________________
dense_3 (Dense) (None, 5) 165
_________________________________________________________________
Total params: 12,723,909
Trainable params: 12,723,909
Non-trainable params: 0
_________________________________________________________________
希望您能帮助我们。提前致谢。
【问题讨论】:
-
在不知道您要做什么以及您的数据是什么样的情况下给出答案几乎是不可能的。
-
我们正在尝试检测语音中的情绪。所以我们创建了一个没有轴的灰度 librosa.waveplot。之后我们读取像素并使用这些数据来训练网络。希望这对您来说已经足够了吗?
标签: tensorflow keras loss acc