Проблемы с объединением API DenseFeatures и fit_generator в Kears - PullRequest
0 голосов
/ 19 июня 2020

Я использую api Keras fit_generator для запуска модели путем чтения данных в патроне, так как у меня есть огромное количество данных, которые не могут быть загружены в память сразу.

def batch_generator(Train_df, batch_size,steps):
    idx=1
    while True: 

        yield load_data(Train_df,idx-1,batch_size)
        if idx<steps:
            idx+=1
        else:
            idx=1

def load_data(Train_df,idx, batch_size):

        df = pd.read_csv( Train_df, skiprows = idx*batch_size, nrows=batch_size,  sep="\t", header=None)

        x = fill_missing_data(df.iloc[:,1:14])
        y = df.iloc[:,0] 

        return ((fill_missing_data(x)), (y))

Теперь я использую этот генератор данных в качестве входных данных для kerss fit_generator следующим образом:

my_training_batch_generator = batch_generator('filename.csv', batch_size,steps_per_epoch)
model = new_model()
model.fit_generator( my_training_batch_generator,
                         callbacks= callbacks,
                         epochs=nb_epoch,
                         steps_per_epoch=steps_per_epoch
                       )

И моя модель выглядит так

def new_model():
    model = Sequential()
    feature_columns = get_feature_columns()
    feature_layer = tf.keras.layers.DenseFeatures(feature_columns, name="feature_layer")
    Dense = tf.keras.layers.Dense
    Dense = tf.keras.layers.Dense
    kernel_regularizer=tf.keras.regularizers.l2(0.001)


    model = tf.keras.Sequential(
        [
            feature_layer,
            Dense(20, activation=tf.nn.relu, kernel_regularizer=kernel_regularizer),
            Dense(1, activation=tf.nn.sigmoid, kernel_regularizer=kernel_regularizer)
        ])

    model.compile(
          optimizer = tf.optimizers.Adagrad(learning_rate = 0.001),
          loss = tf.keras.losses.BinaryCrossentropy(),
          metrics =  [tf.keras.metrics.AUC()])



    return model

Проблема находится с feature_layers в инициализации модели следующим образом

ValueError: ('Мы ожидали здесь словарь. Вместо этого мы получили: тензор формы 13

Сейчас я используя входное измерение 13 целых чисел, но мой план состоит в том, чтобы использовать как numeri c, так и категориальные столбцы, и преобразовать все столбцы с помощью tf.feature_column api, где input_dim будет неизвестным.

Без feature_layers, если я укажите input_dim, тогда модель будет работать без ошибок.

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