Может ли функция Keras 'Sequential fit () принять в качестве данных поезда Pandas фрейм данных? - PullRequest
0 голосов
/ 18 января 2020

Я хочу создать нейронную сеть с Keras, и мои обучающие данные находятся в фрейме данных pandas, который называется df_train, который имеет следующую форму. Каждая строка представляет собой событие / наблюдение, состоящее из 51 переменной.

df_train.head()

enter image description here

Мой вопрос: могу ли я использовать этот фрейм данных df_train в качестве входных данных? в команде Keras model.fit ()? Как показано ниже

net = Sequential()
net.add(Dense(70, input_dim = 51, activation = "relu"))
net.add(Dense(70, activation = "relu"))
net.add(Dense(1, activation = "sigmoid")) 
net.compile(loss = "binary_crossentropy", optimizer = "adam", metrics = ["accuracy"])
net.fit(df_train, train_labels, epochs = 300, batch_size = 100)

В net .fit () я передаю в качестве последовательности данных фрейм данных, но в последовательной документации он не упоминает фрейм данных в качестве допустимого ввода. Тем не менее, в моем коде это работает, и модель работает нормально. Что-то происходит за кулисами неправильно и просто нет ошибок, или он работает так, как задумано, даже если вы используете фрейм данных pandas в качестве входных данных?

Кроме того, если это работает, команда fit () в этом случае принимает в качестве входных данных одну строку данного фрейма данных за раз?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 18 января 2020
net.fit(df_train, train_labels, epochs = 300, batch_size = 100)

В этом df_train это 2D, а train_label может быть 2D или 1D (это зависит от потери, которую вы упомянули, и единиц выходных слоев)

Ответ на второй вопрос: Да, вы можете сделать

Если вы хотите ввести X в виде одной строки, которая является 1D, то это сгенерировало ошибку:

 ValueError: Expected 2D array, got 1D array instead:array=[1. 2. 3. 4.].
 Reshape your data either using array.reshape(-1, 1) if your data has a single feature 
 or array.reshape(1, -1) if it contains a single sample.

Как мы решаем это

, преобразованное в 2d!

 X=train.iloc[0:1,:]
 print(X.shape)
 output:(1, 25)
 # now this single row converted into  two dim:
0 голосов
/ 23 января 2020

Существует специализированный метод, называемый flow_from_dataframe. Аналогично flow_from_directory, который считывает и передает изображения в вашу нейронную сеть, первый метод позволяет вам передавать данные из фрейма данных.

Вы можете посмотреть здесь, чтобы увидеть приложение flow_from_dataframe:

https://medium.com/@vijayabhaskar96 / tutorial-on-keras-flow-from-dataframe-1fd4493d237 c

Второй вариант - использовать tf.data.Dataset.from_tensor_slices(), то есть определите c для специализированного конвейера данных TensorFlow.

Пример этого доступен здесь: https://www.tensorflow.org/guide/data#consuming_csv_data

Третий метод и, возможно, в будущем самый элегантный и быстро из представления производительности tf.data.experimental.CsvDataset. Причина, о которой я говорю в обозримом будущем, заключается в том, что, как вы можете видеть, она является частью «экспериментальных» пакетов; это означает, что это что-то новое и, следовательно, недостаточно зрелое и стабильное. Ссылка на это приведена здесь: https://www.tensorflow.org/api_docs/python/tf/data/experimental/CsvDataset

Вы можете попробовать любой из этих методов, но для начала я бы придерживался flow_from_dataframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...