I'm trying to understand why my NN doesn't predict at all. I am using an embedding layer from gensim into keras to make a binary classification of paragraphs of text (similar to twitter sentiment analysis).
Here's the code :
from keras.models import Sequential from keras.layers import Flatten from keras.layers import Dense keras_model = Sequential() keras_model.add(embedding) // Added the embedding layer from gensim keras_model.add(Flatten()) keras_model.add(Dense(1, activation='softmax')) keras_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
I'll try to describe in more details my attempts so far :
- Initially I've trained the model using a dataset consisting of ~220k samples and I had 92.85% accuracy, which was great , but then I noticed that the ratio between negative and positive samples was exactly 0.928, which meant I needed to clean my dataset.
2 .I made the dataset with 50/50 distribution of positive to negative samples (~26k samples) then I tried the same and got accuracy of 50%.
3.Played around with different activations (relu, softmax , sigmoid) - no change or it dropped to 0% accuracy.
4.Added an extra hidden layer - again no change.
5.Tried different batch sizes (6,32,128,1024) - no change.
keras_model.summary() Layer (type) Output Shape Param # ================================================================= embedding_2 (Embedding) (None, 500, 100) 596200 _________________________________________________________________ flatten_5 (Flatten) (None, 50000) 0 _________________________________________________________________ dense_5 (Dense) (None, 1) 50001 ================================================================= Total params: 646,201 Trainable params: 50,001 Non-trainable params: 596,200 _________________________________________________________________
Is there anything that can be done to get some real accuracy from this neural netowork ? Am I doing something wrong or the dataset is small to have a neural network as a classifier.