Increase Accuracy on Keras Multiclass Classifier I have a dataset with the shape (430, 17). My output is a single column consisting of possible options &quot;Best&quot;, &quot;Medium&quot;, &quot;Worst&quot;. I split my data into X and y, and then into training and testing sets after using the StandardScaler to scale X.
I then using the LabelEncoder and get_dummies to prepare my output values.
&gt;&gt;&gt;X_train[:1]

   array([[-0.62115527,  0.73646208,  1.27931666, -1.13977066, -0.03124594,
        -0.06595102, -0.35812162,  2.47947661,  0.01705523, -0.75215293,
        -0.43173137, -0.15181261]])

&gt;&gt;&gt;y_train[:1]

   array([[0, 1, 0]], dtype=uint8)

I then prepared a keras Model based on an example from the iris dataset that also worked with a multiclass classifier using Keras.
model = Sequential()
model.add(Dense(20, input_dim = 17 , activation = 'tanh'))
model.add(Dense(64, activation = 'tanh'))
model.add(Dense(64, activation = 'tanh'))
model.add(Dense(64, activation = 'tanh'))
model.add(Dense(3, activation = 'softmax'))
model.compile(Adam(lr=0.04),'categorical_crossentropy', ['accuracy'])

model.fit(X_train, y_train, epochs = 100, verbose=1)

y_pred = model.predict(X_test)

scores = model.evaluate(X_test, y_test)
print(&quot;\n%s: %.2f%%&quot; % (model.metrics_names[1], scores[1]*100))

I have been changing the inputs and general architecture of the model for the last few hours, but I cannot seem to be able to get the accuracy above 63.64%.
Sample Output:
Epoch 95/100
11/11 [==============================] - 0s 2ms/step - loss: 0.6250 - accuracy: 0.7037
Epoch 96/100
11/11 [==============================] - 0s 2ms/step - loss: 0.7214 - accuracy: 0.6980
Epoch 97/100
11/11 [==============================] - 0s 2ms/step - loss: 0.7595 - accuracy: 0.7123
Epoch 98/100
11/11 [==============================] - 0s 2ms/step - loss: 0.7197 - accuracy: 0.6838
Epoch 99/100
11/11 [==============================] - 0s 2ms/step - loss: 0.6658 - accuracy: 0.6895
Epoch 100/100
11/11 [==============================] - 0s 1ms/step - loss: 0.7103 - accuracy: 0.6838
3/3 [==============================] - 0s 997us/step - loss: 0.8703 - accuracy: 0.6364

My question is:
Can you advise on what I can do to increase the accuracy of the validation data?
Edit 1:
Changed the hidden layer nodes to 12, and changed to activate to relu. Here is a picture of the training and validation so far:

Edit 2:
Changed the focus of the posting from two questions to one. I also added the most recent model, and results:
model = Sequential()
model.add(Dense(20, input_dim = 17 , activation = 'tanh'))
model.add(Dense(24, activation = 'tanh'))
model.add(Dense(24, activation = 'tanh'))
model.add(Dropout(0.11))
model.add(Dense(24, activation = 'relu'))
model.add(Dense(3, activation = 'softmax'))
model.compile(Adam(lr=0.002),loss = 'categorical_crossentropy', metrics = ['accuracy', &quot;mse&quot;, &quot;mae&quot;])
history = model.fit(X_train, y_train, epochs = 800, validation_split = 0.2, verbose=0)
You should understand if the model you built is able to learn from the data. Therefore, plot the accuracy and the loss for both training and validation set versus the number of epochs.
Then, if the model needs more epochs, give it more epochs. Otherwise, try different optimizers, activation functions, number of neurons, number of layers, and batch size.

From the (flawed) plots you provided (please, plot accuracy for training and validation on one graph, and loss for training and validation on another graph), you can see two clear phenomena:

accuracy stops to increase after a very few epochs;
loss curve is unstable.

which suggest that the model does not learn from the data (I would start off with a shallow architecture, tuning number of neurons, trying different optimizers, activation functions, and then number of layers) and the dataset could be unrepresentative.