Company logo
  • Empleos
  • Bootcamp
  • Acerca de nosotros
  • Para profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
    • Bootcamp
  • Para empresas
    • Inicio
    • Nuestro proceso
    • Planes
    • Pruebas
    • Nómina
    • Blog
    • Comercial
    • Calculadora

0

109
Vistas
When recognizing hand gesture classes, I always get the same class in Keras

When recognizing hand gesture classes, I always get the same class, although I tried changing the parameters and even passed the data without normalization:

df_train = pd.read_csv('train_dataset.csv')
df_train = df_train.drop(columns=['Unnamed: 0'], axis=1)
df_train = df_train.fillna(0)

x_train = df_train.drop(['y'], axis=1)
y_train = df_train['y']

x_train = x_train / 310

model = keras.models.Sequential([Dense(32, input_shape=(42,), activation='relu'),
                                Dense(64, activation='relu'),
                                Dense(6, activation='softmax')])

model.compile(optimizer='adam',
             loss='categorical_crossentropy',
             metrics=['accuracy'])

model.fit(x_train, y_train_cat, batch_size=16, epochs=9, validation_split=0.2)

model.save("gestures_model.h5")

Here is a main code:

REV_CLASS_MAP = {
    0: "up",
    1: "down",
    2: "right",
    3: "left",
    4: "forward",
    5: "back"
}

def mapper(val):
    return REV_CLASS_MAP[val]

if len(data[data.index(new_row)]) > 0:
    df = pd.DataFrame(data, columns=columns)
    df = df.fillna(0)
    df = df / 310
    pred = model.predict(df)
    move_code = np.argmax(pred[0])
    user_move_name = mapper(move_code)
    print(user_move_name)

Here is an example of input data:

56,172,72,169,88,155,100,144,111,139,78,120,81,94,82,77,82,62,66,120,62,104,62,124,64,136,54,122,50,110,52,130,55,139,43,126,40,114,42,129,45,137,0

What am I doing wrong and how to fix it? I noticed that in my data there are rows in which there is only one number. Could this be the cause of my problem? ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ P.S I am new to neural networks and keras.

New

Here is df_train before processing:

,x11,x21,x12,x22,x13,x23,x14,x24,x15,x25,x16,x26,x17,x27,x18,x28,x19,x29,x110,x210,x111,x211,x112,x212,x113,x213,114,214,115,x215,x116,x216,x117,x217,x118,x218,x119,x219,x120,x220,x121,x221,y
56,172,72,169,88,155,100,144,111,139,78,120,81,94,82,77,82,62,66,120,62,104,62,124,64,136,54,122,50,110,52,130,55,139,43,126,40,114,42,129,45,137,0
...
84,166,96,158,108,143,108,131,101,127,87,145,87,128,90,118,94,111,74,147,76,119,81,114,84,115,64,148,66,120,72,119,74,124,56,148,57,124,61,124,63,129,5

Here is df_train after processing:

     x11  x21  x12  x22  x13  x23  x14  ...  x119  x219  x120  x220  x121  x221    y
0     56  175   73  168   88  155  101  ...    42   113    44   130    47   138  0.0
1    172   72  169   88  155  100  144  ...   114    42   129    45   137     0  0.0
2    172   72  169   88  155  100  144  ...   114    42   129    45   137     0  0.0
3    174   74  167   89  155  101  144  ...   115    44   130    46   137     0  0.0
4    174   74  169   90  155  101  144  ...   114    44   128    46   136     0  0.0
..   ...  ...  ...  ...  ...  ...  ...  ...   ...   ...   ...   ...   ...   ...  ...
843  166   96  158  108  143  108  131  ...   124    61   124    63   129     5  0.0
844  166   94  158  105  145  104  132  ...   128    58   130    59   134     5  0.0
845  164   90  155  101  141  100  129  ...   126    55   129    57   134     5  0.0
846  158   88  152   99  140   96  128  ...   142    54   150    58   146     5  0.0
847  158   88  152   99  140   96  128  ...   142    54   150    58   146     5  0.0

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

11 months ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

You are probably using the wrong column as your labels, since they are all zero, which does not make any sense. I think you should be referring to the second last column, which has values from 0 to 5 (6 classes). Here is a running example:

import tensorflow as tf
import pandas as pd

df_train = pd.read_csv('/content/training_set.csv', skiprows=1, index_col=0)
df_train = df_train.fillna(0)
x_train = df_train.drop(['138.1', '0.1'], axis=1)
y_train = df_train['138.1']
x_train = x_train / 310
y_train_cat = tf.keras.utils.to_categorical(y_train, 6)
model = tf.keras.Sequential([tf.keras.layers.Dense(64, input_shape=(41,), activation='relu'),
                                tf.keras.layers.Dense(32, activation='relu'),
                                tf.keras.layers.Dense(6, activation='softmax')])

model.compile(optimizer='adam',
             loss='categorical_crossentropy',
             metrics=['accuracy'])

model.fit(x_train, y_train_cat, batch_size=16, epochs=9, validation_split=0.2)
model.save("gestures_model.h5")

REV_CLASS_MAP = {
    0: "up",
    1: "down",
    2: "right",
    3: "left",
    4: "forward",
    5: "back"
}

def mapper(val):
    return REV_CLASS_MAP[val]

df_test = pd.read_csv('/content/testing_set.csv', skiprows=1, index_col=0)
df_test = df_test.fillna(0)
x_test = df_test.drop(['140', '0.1'], axis=1)
y_test = df_test['140']

model = tf.keras.models.load_model("/content/gestures_model.h5")

predicted_list = model.predict(x_test)

print(tf.argmax(predicted_list, axis=-1))
tf.Tensor(
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 1 4 4 4 4 4 4 4 4 4 4 4
 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4
 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0
 0 0 0 1 1 0 0 4 4 4 0 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 1 1 1 3 4 4 4 4 1
 1 1 4 1 1 1 4], shape=(599,), dtype=int64)

This just an example to illustrate what you should be doing, you should obviously tune your model and its parameter.

11 months ago · Santiago Trujillo Denunciar

0

All rows need the same data size, of course some values can be empty in csv.

feature1, feature2, feature3,y
aaa,bbb,3.0,2.0
bbb, ,4.1, 3.1

You need to impute empty values by using for example most frequent value for categorical values or median for numerical values. Predicted value cant be empty

11 months ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos