Я получаю сообщение об ошибке при попытке сделать model.save(save_path)
.
Я использую tenorflow 2.0 альфа
Файл
"/Home/eugenekim/virtualenvs/ds-pip/local/lib/python3.6/site-packages/tensorflow/python/util/serialization.py",
строка 69, в get_json_type
поднять TypeError ('Not JSON Serializable:', obj) TypeError: ('Not JSON Serializable:',
Ь '\ п \ x04Mean \ x12 \ x04Mean \ x1a "Item_1 / embedding_lookup / Identity_2 \ x1a \ x16Mean / reduction_indices * \ п \ п \ x04Tidx \ x12 \ X020 \ x03 * \ X0F \ п \ tkeep_dims \ x12 \ x02 (\ x00 * \ X07 \ п \ x01T \ x12 \ X020 \ x01' )
Правильный код следующий (моя лучшая догадка).
Для ввода (который представляет собой список идентификаторов) я получаю вложения каждого из них и усредняю их. И я использую их как одну из функций для объединения слоев.
import copy
import tensorflow as tf
import pandas as pd
from tensorflow.keras.layers import Input, Embedding, concatenate, Dense, Flatten
from tensorflow import feature_column
from tensorflow.python.keras.engine import training_utils
def df_to_dataset(dataframe, shuffle=True, batch_size=32):
dataframe = dataframe.copy()
labels = dataframe.pop('target')
d = dict(dataframe)
ds = tf.data.Dataset.from_tensor_slices((d, labels))
if shuffle:
ds = ds.shuffle(buffer_size=len(dataframe))
ds = ds.batch(batch_size)
return ds
def get_model():
first_input = Input(shape = (1,), name='first_input')
second_input = Input(shape = (1,), name='second_input' )
embedding_layer = Embedding(input_dim=10, output_dim=3, input_length=1)
first_input_encoded = embedding_layer(first_input)
first_input_encoded = tf.keras.layers.Reshape((3,))(first_input_encoded)
selected = embedding_layer(second_input)
item_average = tf.reduce_mean(selected, axis=1, keepdims=True)
second_input_encoded = tf.keras.layers.Reshape((3,))(item_average)
o = concatenate([first_input_encoded, second_input_encoded])
o = Dense(1)(o)
inputs = [first_input, second_input]
model = tf.keras.models.Model(inputs=inputs, outputs=o)
return model
df = pd.DataFrame(
[[3,[4,2,3],5, 'boy', 0],
[2,[6,1,2],7, 'girl', 1]], columns=['first_input', 'second_input', 'child_month_young', 'child_gender_young', 'target'])
train_ds = df_to_dataset(df)
val_ds = df_to_dataset(df)
model = get_model()
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(
train_ds,
validation_data=val_ds,
epochs=1
)
print(model.summary())
# tf.keras.models.save_model(model, 'test.h5')
model.save('test.h5')