Пользовательский лямбда-слой Keras для переноса функций предварительной обработки tf.placeholder () ошибка времени выполнения - PullRequest
0 голосов
/ 16 января 2020

Я написал лямбда-слой Keras, предназначенный для обертывания пользовательской функции предварительной обработки, которая использует pandas функциональность фрейма данных. Он предназначен для приема массива входных данных numpy, который оборачивается в фрейм данных и передается через пользовательскую функцию.

Рассмотрим следующую функцию, prepare_data () , которая принимает входные данные:

def prepare_data(df):
    df = df[['userId', 'dataDate','x1', 'x2','x3', 'x4', 'x5','x6', 'x7', 'x8','x9','x10','x11']]
    df['date'] = pd.to_datetime(df["dataDate"])
    df.sort_values(by=['userId', 'date'], inplace=True, ascending=True)
    df.rename(columns={'x11': 'x12'}, inplace=True)
    df.drop(['dataDate', 'date'], axis=1, inplace=True)
    df['x6'].fillna(method='ffill', inplace=True)
    df['x7'].fillna(0, inplace=True)
    df['x8'].fillna(0, inplace=True)
    df['x9'].fillna(0, inplace=True)
    df['x10'].fillna(0, inplace=True)
    return df 

Я учел слои keras, работающие исключительно с тензорами, возвращая результат, который преобразуется из фрейма данных pd в numpy, а затем преобразуется в тензор, используя tf.numpy_function , а также создает tf.enable_eager_execution () в начале моей программы для поддержка numpy операций в смежности с Keras.

Когда я выполняю модель, я сталкиваюсь с RuntimeError: tf.placeholder () не совместим с нетерпеливым выполнением. , когда я не использовал tf.placeholder где угодно. Любая помощь в преодолении этого смутного шага была бы очень признательна.

def preprocessing(x):
  prepared_data = prepare_data(pd.DataFrame(data=x, index=new_raw_data.index, columns=new_raw_data.columns))
  return prepared_data.values

def preprocessing_tf(x):
  return tf.numpy_function(func=preprocessing, inp=[x], Tout=tf.Tensor)

def create_model():
  model = Sequential()
  model.add(Lambda(preprocessing_tf, input_shape=new_raw_data.shape, output_shape=processed_data.shape))
  return model


model = create_model()
model.compile(optimizer='adam', metrics=['accuracy'])
model.summary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...