Problem description
I'm doing Signal Modulation Classification using a Convolutional Neural Network, but performances are very low (around 15% accuracy) and I can't find out why.
Data
Dataset is composed by 220.000 rows like these. Data is perfectly balanced: I have 20.000 datapoints for each label.
Dataset column | Type | Range | Form | Notes |
---|---|---|---|---|
Signal | i=real, q=real | [i_0, i_1, ..., i_n], [q_0, q_1, ..., q_n] | n=127 | |
SNR | s=integer | [-18, 20] | s | |
Label | l=string | l | They are 11 labels |
Neural Network
Neural Network is a Convolutional composed sequentially by 2 convolutional layers, and 3 fully connected.
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()
Training
Training is being done splitting the data in 70% as Training set, 30% as Test set.
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)
Results
This is the confusion matrix outputted by my evaluation system.
Question
How to improve performance? Can someone criticize my Neural Network?
Thanks.