我正在尝试训练一个神经网络,以估计声音来自的位置(以 0 到 180 度为单位)。
我在 python 中使用 TensorFlow Keras 来训练模型。
输入数据是两个双耳提示,特别是 ILD(耳间电平差)和 ITD(耳间时间差),每个向量由上述两个特征组成,具有维度 [1,71276]。我总共有 2639 次测量,其中 10% 用作验证数据,另外 10% 用作测试数据。
输出应该是 [0,180] 范围内的角度。
我已经对 [-1, 1] 范围内的数据进行了标准化,我能够实现的最佳损失是 MSE = 16。
获得最高 MSE 的模型如下:
model = tf.keras.Sequential(([
tf.keras.layers.Input(shape=(71276,), name='input'),
tf.keras.layers.Dense(units=900,activation='relu', name='dense_1'),
tf.keras.layers.Dense(units=360,activation='relu', name='dense_2'),
tf.keras.layers.Dense(units=180,activation='relu', name='dense_3'),
tf.keras.layers.Dense(units=1,activation='linear', name='output')
]))
model.compile(loss='mse',
optimizer=tf.keras.optimizers.Adam(lr=0.001),
metrics=['mae'])
EPOCHS = 500
BATCH_SIZE = 32
callbacks = [
tf.keras.callbacks.EarlyStopping(monitor='val_loss', mode='min', min_delta=0.5, patience=100, verbose=1),
tf.keras.callbacks.ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True),
tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=50, verbose=1, mode='min', min_delta=2, cooldown=0, min_lr=0.000001)
]
history = model.fit(X_train, y_train, validation_data=(X_val,y_val), shuffle=True,
batch_size=BATCH_SIZE,
epochs=EPOCHS, verbose=1,
callbacks=callbacks)
由于这是我使用自己的数据训练的第一个神经网络,我想知道我是否遗漏了任何可以减少损失函数的明显内容,如果没有,欢迎提出任何建议!
我应该注意,我正在使用 google collaboratory,并且我已经尝试添加另一个隐藏层,但我遇到了内存不足错误。我也尝试过增加/减少每一层的神经元数量,但没有得到更好的结果,我也尝试使用 CNN 架构,但收效甚微,因为它在 300 个 epoch 之后甚至没有收敛。
提前致谢!