Модель Keras: проблема несоответствия входной формы после отладки измеренийPython

Программы на Python
Ответить
Anonymous
 Модель Keras: проблема несоответствия входной формы после отладки измерений

Сообщение Anonymous »

0
У меня есть модель Keras с несколькими входами, сочетающая текстовый и числовой ввод. Оба входных данных пропускаются через плотные слои, за которыми следуют слои внедрения, затем объединяются и объединяются с помощью GlobalMaxPooling1D. Несмотря на тщательную отладку размеров слоев на каждом этапе, я по-прежнему сталкиваюсь с ошибкой при загрузке данных в модель.
Вот определение модели:
def model_builder(hp, vocab_size, max_token_size):
# Гиперпараметры
hp_text_units = hp.Int('text_units', min_value=64, max_value=512, шаг=32)
hp_numeric_units = hp.Int('numeric_units', min_value=32, max_value=256, шаг=32)
hp_dropout = hp.Float('dropout', min_value= 0,1, max_value=0,5, шаг=0,1)
hp_learning_rate = hp.Float('learning_rate', min_value=1e-4, max_value=1e-2, sample='log')

Код: Выделить всё

# Girdi tanımlamaları
text_input = tf.keras.Input(shape=(max_token_size,), dtype="int32", name="text_input")
numeric_input = tf.keras.Input(shape=(26,), name="numeric_input")
# Debugging Embedding Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=text_input)
print("Text input Shape (Static):", temp_model.output_shape)

temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_input)
print("Numeric input Shape (Static):", temp_model.output_shape)

text_dense = tf.keras.layers.Dense(224, activation='relu')(text_input)

# Debugging Text Dense Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=text_dense)
print("Text Dense Layer Shape (Static):", temp_model.output_shape)

# Embedding katmanı
embedding_layer = tf.keras.layers.Embedding(
input_dim=224,#vocab_size,
output_dim=224,  # Embedding boyutu sabit
#input_length=max_token_size
)(text_dense)

# Debugging Embedding Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=embedding_layer)
print("Embedding Layer Shape (Static):", temp_model.output_shape)

# Text Pipeline
text_dense1 = tf.keras.layers.Dense(224, activation='relu')(embedding_layer)

# Debugging Text Dense Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=text_dense1)
print("Text Dense Layer 1 Shape (Static):", temp_model.output_shape)

text_batch_normalization = tf.keras.layers.BatchNormalization()(text_dense1)

# Debugging Text Dense Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=text_batch_normalization)
print("Text Batch Normalization Shape (Static):", temp_model.output_shape)

text_dropout = tf.keras.layers.Dropout(hp_dropout)(text_batch_normalization)

temp_model = tf.keras.Model(inputs=text_input, outputs=text_dropout)
print("Text Dropout Shape (Static):", temp_model.output_shape)

# Numeric Pipeline
numeric_input_reshaped = tf.keras.layers.Reshape((26,))(numeric_input)
temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_input_reshaped)
print("Numeric Reshape Layer Shape (Static):", temp_model.output_shape)

numeric_dense = tf.keras.layers.Dense(224, activation='relu')(numeric_input_reshaped)

# Debugging Numeric Dense Layer Output
temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_dense)
print("Numeric Dense Layer Shape (Static):", temp_model.output_shape)

#flattened_numeric_input = tf.keras.layers.Flatten()(numeric_input)
embedding_layer_numeric = tf.keras.layers.Embedding(
input_dim=224,
output_dim=224,  # Embedding boyutu sabit
#input_length=max_token_size
)(numeric_dense)

# Debugging Embedding Layer Output
temp_model = tf.keras.Model(inputs=text_input, outputs=embedding_layer_numeric)
print("Embedding Layer Numeric Shape (Static):", temp_model.output_shape)

numeric_dense1 = tf.keras.layers.Dense(224, activation='relu')(embedding_layer_numeric)

# Debugging Numeric Dense Layer Output
temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_dense1)
print("Numeric Dense Layer 1 Shape (Static):", temp_model.output_shape)

numeric_batch_normalization = tf.keras.layers.BatchNormalization()(numeric_dense1)
temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_batch_normalization)
print("Numeric Batch Normalization Shape (Static):", temp_model.output_shape)

numeric_dropout = tf.keras.layers.Dropout(hp_dropout)(numeric_batch_normalization)
temp_model = tf.keras.Model(inputs=numeric_input, outputs=numeric_dropout)
print("Numeric Dropout Shape (Static):", temp_model.output_shape)

# Birleştirme
combined = tf.keras.layers.Concatenate()([text_dropout, numeric_dropout])

# Debugging Concatenated Layer Output
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined)
temp_model = tf.keras.Model(inputs=[combined],  outputs=combined)
print("Concatenated Layer Shape (Static):", temp_model.output_shape)

# Global Max Pooling ile boyut düşürme
combined_pooled = tf.keras.layers.GlobalMaxPooling1D()(combined)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_pooled)
print("Concatenated GlobalMaxPooling Shape (Static):", temp_model.output_shape)

# Combined Pipeline
combined_dense1 = tf.keras.layers.Dense(256, activation='relu')(combined_pooled)

# Debugging Combined Dense Layer 1 Output
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dense1)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dense1)
print("Combined Dense Layer 1 Shape (Static):", temp_model.output_shape)

combined_batch_normalization = tf.keras.layers.BatchNormalization()(combined_dense1)
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_batch_normalization)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_batch_normalization)
print("Combined Batch Normalization Shape (Static):", temp_model.output_shape)

combined_dropout = tf.keras.layers.Dropout(hp_dropout)(combined_batch_normalization)
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dropout)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dropout)
print("Combined Dropout Shape (Static):", temp_model.output_shape)

combined_dense2 = tf.keras.layers.Dense(128, activation='relu')(combined_dropout)

# Debugging Combined Dense Layer 2 Output
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dense2)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dense2)
print("Combined Dense Layer 2 Shape (Static):", temp_model.output_shape)

combined_batch_normalization1 = tf.keras.layers.BatchNormalization()(combined_dense2)
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_batch_normalization1)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_batch_normalization1)
print("Combined Batch Normalization 1 Shape (Static):", temp_model.output_shape)

combined_dropout1= tf.keras.layers.Dropout(hp_dropout)(combined_batch_normalization1)
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dropout1)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dropout1)
print("Combined Dropout 1 Shape (Static):", temp_model.output_shape)

combined_dense3 = tf.keras.layers.Dense(64, activation='relu')(combined_dropout1)

# Debugging Combined Dense Layer 3 Output
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dense3)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dense3)
print("Combined Dense Layer 3 Shape (Static):", temp_model.output_shape)

combined_dropout2 = tf.keras.layers.Dropout(hp_dropout)(combined_dense3)
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=combined_dropout2)
temp_model = tf.keras.Model(inputs=[combined], outputs=combined_dropout2)
print("Combined Dropout2 Shape (Static):", temp_model.output_shape)

# Çıkış Katmanı
output = tf.keras.layers.Dense(1, activation='sigmoid')(combined_dropout2)

# Debugging Output Layer Shape
#temp_model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=output)
temp_model = tf.keras.Model(inputs=[combined], outputs=output)

print("Output Layer Shape (Static):", temp_model.output_shape)

# Model Derleme
model = tf.keras.Model(inputs=[text_input, numeric_input], outputs=output)
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss='binary_crossentropy',
metrics=['accuracy']
)

return model
Журналы ошибок:
Несмотря на проверку размеров по всей модели с помощью операторов отладочной печати, я получаю следующую ошибку, когда модель начинает обучение:
ValueError: Исключение возникло при вызове Functional.call(). Ввод 0 слоя «плотный» несовместим со слоем: ожидалось, что ось -1 входной формы будет иметь значение 1149, но получен ввод с формой (Нет, 26)
Журналы отладки: здесь — это размеры слоя, напечатанные во время построения модели:
Форма ввода текста (статические): (нет, 1149) Форма плотного слоя текста (статические): (нет, 224) Внедрение формы слоя (Статические): (Нет, 224, 224) Форма плотного слоя 1 текста (Статические): (Нет, 224, 224) Форма нормализации текстового пакета (Статические): (Нет, 224, 224) Форма выпадения текста (Статические): ( Нет, 224, 224) Числовой ввод Форма (статические): (Нет, 26) Числовое изменение формы слоя (статические): (Нет, 26) Числовая форма плотного слоя (статические): (Нет, 224) Числовая форма внедренного слоя (статические): (Нет, 224, 224) Числовая форма плотного слоя 1 (статические): (Нет, 224, 224) Числовая Форма пакетной нормализации (статическая): (Нет, 224, 224) Форма исключения числовых значений (статическая): (Нет, 224, 224) Форма объединенного слоя (статические): (Нет, 224, 448) Форма составного слоя GlobalMaxPooling (статические): (Нет, 448) Форма объединенного плотного слоя 1 (статические): (Нет, 256) Форма объединенной пакетной нормализации (статические) ): (Нет, 256) Комбинированная форма дропаута (Статические): (Нет, 256) Комбинированная форма плотного слоя 2 (статические): (Нет, 128) Комбинированная форма пакетной нормализации 1 (статические): (Нет, 128) Комбинированная форма исключения 1 (статические): (Нет, 128) Комбинированная форма плотного слоя 3 (статические): (Нет, 64) Комбинированная форма Dropout2 (Статические): (Нет, 64) Форма выходного слоя (Статические): (Нет, 1)

Подробнее здесь: https://stackoverflow.com/questions/792 ... dimensions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»