我最近发布了另一个问题,这个问题是那个问题的演变。
顺便说一句,我将继续下面的所有问题,就像之前的问题不存在一样。
问题描述
我正在使用卷积神经网络进行信号调制分类,我想提高性能。
数据
数据集由 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的信号进行分类的准确度。
我尝试了什么?
这是我尝试过的事情的列表,我确信这些事情正在使性能变得更糟:
- 减少批量大小(只增加训练时间而不提高测试准确性)
- 没有太嘈杂的信号的训练(降低准确性)
- 将 Dropout 层移到 Flatten 层之前
问题
有什么建议可以获得更好的表现吗?
提前致谢!


