问题描述
我正在使用卷积神经网络进行信号调制分类,但性能非常低(准确率约为 15%),我不知道为什么。
数据
数据集由 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 个标签 |
神经网络
神经网络是由 2 个卷积层和 3 个全连接顺序组成的卷积。
DROPOUT_RATE = 0.5
iq_in = keras.Input(shape=in_shp, name="IQ")
conv_1 = Convolution1D(128, 7, input_shape=(1, 2, 128), padding="same", activation="relu")(iq_in)
dr_1 = Dropout(DROPOUT_RATE)(conv_1)
conv_2 = Convolution1D(128, 5, padding="same", activation="relu")(dr_1)
max_pool = MaxPooling1D(padding='same')(conv_2)
fc1 = Dense(256, name="fc1")(max_pool)
dr_2 = Dropout(DROPOUT_RATE)(fc1)
fc2 = Dense(128, name="fc2")(dr_2)
out_flatten = Flatten()(fc2)
output = Dense(11, name="output")(out_flatten)
model = keras.Model(inputs=[iq_in], outputs=[output])
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.summary()
训练
正在完成训练,将数据分成 70% 作为训练集,30% 作为测试集。
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)
结果
这是我的评估系统输出的混淆矩阵。
问题
如何提高性能?有人可以批评我的神经网络吗?
谢谢。