python - 神经网络参数稳定
问题描述
我正在尝试音频分类。
我的代码 -
x_train = (800, 32, 1)
x_test = (200, 32, 1)
y_train = (800, 1)
y_test = (200, 1)
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=20, padding='same', input_shape=(32,1), activation="relu"))
model.add(MaxPooling1D(3))
model.add(Conv1D(filters=64, kernel_size=15, padding='same', activation="relu"))
model.add(MaxPooling1D(2))
model.add(Conv1D(filters=96, kernel_size=10, padding='same', activation="relu"))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dropout(0.5))
model.add(Dense(96, activation="relu"))
model.add(Dense(10, activation="softmax"))
model.compile(
loss ='sparse_categorical_crossentropy',
optimizer = Adam(lr=0.01),
metrics = ['accuracy']
)
model.summary()
red_lr= ReduceLROnPlateau(monitor='val_loss', patience=3, verbose=1, factor=0.001, mode='min')
check=ModelCheckpoint(filepath=r'/content/drive/My Drive/Colab Notebooks/genre/cnn.hdf5', verbose=1,save_best_only = True)
History = model.fit(x_train,y_train, epochs=30,batch_size=128,validation_data = (x_test, y_test),verbose = 2, callbacks=[check, red_lr,],shuffle=True )
我从 1 层开始并增加了精度层我拥有的最佳模型具有这些值 - (损失:0.5385 - acc:0.8275 - val_loss:0.8758 - val_acc:0.7400)
我运行了 4 到 5 次,所有在 val_acc 和 val_loss 中都具有相同的模式这两个参数逐渐增加,并且在执行了一半的 epoch 后,它将在其余的 epochs 中变得稳定......就像这样,
任何提高准确性的建议,以及为什么损失在一半的时期内没有改变
解决方案
有两种可能的答案。您的模型已经处于局部最小值或超过局部最小值。您可以做的测试是在优化器函数中设置较低的学习率:
optimizer = Adam(lr=0.001) # change it to 0.001 or even lower
推荐阅读
- rust - 函数返回不可变引用,但借用检查器不这么认为
- linux - 从安装了 `docker.sock` 的 docker 容器中查找主机上的开放端口
- android - 如何更改我使用 SNAP 安装的 Android Studio 的超级用户设置
- node.js - 如何配置 Nginx 和 Node 以使用 SSL?
- python - 在另一列中创建基于 INT 的 N 行
- c - 军用时间和标准时间逻辑有效,但时间指示器字符串不起作用
- winapi - MFC:Ctrl-Shift 的加速器不起作用?
- java - 在 Red Hat EAP 7.3 上找不到命名的 JMS 队列
- javascript - puppeteer / chromium:生成 pdf 不同的 div 高度
- sql-server - SSIS在两个表之间复制很慢