用于信号调制分类的卷积神经网络

数据挖掘 深度学习 分类 喀拉斯 卷积神经网络
2022-02-09 13:50:53

我最近发布了另一个问题,这个问题是那个问题的演变

顺便说一句,我将继续下面的所有问题,就像之前的问题不存在一样。

问题描述

我正在使用卷积神经网络进行信号调制分类,我想提高性能。

数据

数据集由 220.000 行组成。数据完美平衡:每个标签都有 20.000 个数据点。

数据集列 类型 范围 形式 笔记
信号 i=真实,q=真实 [i_0, i_1, ..., i_n], [q_0, q_1, ..., q_n] n=127
信噪比 s=整数 [-18, 20] s
标签 l=字符串 l 它们是 11 个标签

SNR 值越低,信号越嘈杂:对低 SNR 信号进行分类并不容易。

神经网络

神经网络是一个卷积神经网络,编码如下:

DROPOUT_RATE = 0.5

iq_in = keras.Input(shape=in_shp, name="IQ")
reshape = Reshape(in_shp + [1])(iq_in)
batch_normalization = BatchNormalization()(reshape)

conv_1 = Convolution2D(16, 4, padding="same", activation="relu")(batch_normalization)
max_pool = MaxPooling2D(padding='same')(conv_1)
batch_normalization_2 = BatchNormalization()(max_pool)
fc1 = Dense(256, activation="relu")(batch_normalization_2)
conv_2 = Convolution2D(32, 2, padding="same", activation="relu")(fc1)
batch_normalization_3 = BatchNormalization()(conv_2)
max_pool_2 = MaxPooling2D(padding='same')(batch_normalization_3)

out_flatten = Flatten()(max_pool_2)
dr = Dropout(DROPOUT_RATE)(out_flatten)
fc2 = Dense(256, activation="relu")(dr)
batch_normalization_4 = BatchNormalization()(fc2)
fc3 = Dense(128, activation="relu")(batch_normalization_4)
output = Dense(11, name="output", activation="softmax")(fc3)

model = keras.Model(inputs=[iq_in], outputs=[output])
model.compile(loss='categorical_crossentropy', optimizer='adam')

model.summary()

神经网络

训练

正在完成训练,将数据分成75% 作为训练集,25% 作为测试集

NB_EPOCH = 100     # number of epochs to train on
BATCH_SIZE = 1024  # training batch size

filepath = NEURAL_NETWORK_FILENAME

history = model.fit(
    X_train,
    Y_train,
    batch_size=BATCH_SIZE,
    epochs=NB_EPOCH,
    validation_data=(X_test, Y_test),
    callbacks = [
        keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=True, mode='auto'),
        keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, verbose=0, mode='auto')
    ])

# we re-load the best weights once training is finished
model.load_weights(filepath)

结果

混淆矩阵

我的评估系统评估了我的神经网络对具有不同 SNR的信号进行分类的准确度。

准确度_2_SNR

我尝试了什么?

这是我尝试过的事情的列表,我确信这些事情正在使性能变得更糟:

  • 减少批量大小(只增加训练时间而不提高测试准确性)
  • 没有太嘈杂的信号的训练(降低准确性)
  • 将 Dropout 层移到 Flatten 层之前

问题

有什么建议可以获得更好的表现吗?

提前致谢!

2个回答

深度学习解决方案的数据相对较少——总共 220 个数据点和 11 个标签中的每个标签的 20 个数据点。

增加数据量可能会对模型性能产生最大的影响。最好的选择是收集更多数据。另一种选择是数据增强。

由于您的数据较少,请提供更多数据用于训练,例如尝试拆分 80% 20%。
如果训练准确率为 100%,则尝试增加 dropout 百分比。如果训练准确率仍低于 100%,则尝试降低 dropout 百分比并添加更多卷积层。谢谢