Я использую 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, тогда модель будет работать без ошибок.