web-dev-qa-db-fra.com

Pandas DataFrame et Keras

J'essaie d'effectuer une analyse de sentiment en Python à l'aide de Keras. Pour ce faire, je dois faire une incorporation Word de mes textes. Le problème apparaît lorsque j'essaie d'adapter les données à mon modèle:

model_1 = Sequential()
model_1.add(Embedding(1000,32, input_length = X_train.shape[0]))
model_1.add(Flatten())
model_1.add(Dense(250, activation='relu'))
model_1.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

La forme de mes données de train est

(4834,)

Et est un objet de la série Pandas. Lorsque j'essaie d'adapter mon modèle et de le valider avec d'autres données, j'obtiens cette erreur:

model_1.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=2, batch_size=64, verbose=2)

ValueError: erreur lors de la vérification de l'entrée du modèle: attendu embedding_1_input doit avoir une forme (Aucun, 4834) mais un tableau avec une forme (4834, 1)

Comment puis-je remodeler mes données pour les adapter à Keras? J'ai essayé avec np.reshape mais je ne peux pas placer d'éléments Aucun avec cette fonction.

Merci d'avance

9
Gonzalo Donoso

None est le nombre de lignes attendues dans la formation, vous ne pouvez donc pas le définir. De plus, Keras a besoin d’un tableau numpy en entrée et non d’une base de données pandas. Commencez par convertir le fichier DF en tableau numpy avec df.values, puis exécutez np.reshape((-1, 4834)). Notez que vous devriez utiliser np.float32. Ceci est important si vous l’entraînez sur GPU.

10
Dat Tran

https://pypi.org/project/keras-pandas/

Le moyen le plus simple est d’avoir le paquet keras_pandas pour adapter un cadre de données pandas à keras. Le code ci-dessous est un exemple général tiré de la documentation du paquet.

from keras import Model
from keras.layers import Dense

from keras_pandas.Automater import Automater
from keras_pandas.lib import load_titanic

observations = load_titanic()

# Transform the data set, using keras_pandas
categorical_vars = ['pclass', 'sex', 'survived']
numerical_vars = ['age', 'siblings_spouses_aboard', 'parents_children_aboard', 'fare']
text_vars = ['name']

auto = Automater(categorical_vars=categorical_vars, numerical_vars=numerical_vars, text_vars=text_vars,
 response_var='survived')
X, y = auto.fit_transform(observations)

# Start model with provided input nub
x = auto.input_nub

# Fill in your own hidden layers
x = Dense(32)(x)
x = Dense(32, activation='relu')(x)
x = Dense(32)(x)

# End model with provided output nub
x = auto.output_nub(x)

model = Model(inputs=auto.input_layers, outputs=x)
model.compile(optimizer='Adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Train model
model.fit(X, y, epochs=4, validation_split=.2)
6
Pardhu

Vous avez besoin d’une version spécifique de Pandas pour que cela fonctionne. Si vous utilisez la version actuelle (à compter du 20 août 2018), cela échouera.

Annulez vos Pandas et Keras (désinstallation du pip ....), puis installez une version spécifique comme celle-ci.

python -m pip install pandas==0.19.2
0
Tim Seed