На этом шаге мы продемонстрируем эту важность.
Как вы помните, не следует использовать слои, в которых значительно меньше 46 нейронов, потому что результат является 46-мерным. Давайте посмотрим, что получится, если образуется узкое место для информации из-за промежуточных слоев с размерностями намного меньше 46, например четырехмерных.
model = keras.Sequential([
layers.Dense(64, activation="relu"),
layers.Dense(4, activation="relu"),
layers.Dense(46, activation="softmax")
])
model.compile(optimizer="rmsprop",
loss="categorical_crossentropy",
metrics=["accuracy"])
model.fit(partial_x_train,
partial_y_train,
epochs=20,
batch_size=128,
validation_data=(x_val, y_val))
Теперь модель показывает точность ~71% - абсолютное падение составило 8% . Оно обусловлено в основном попыткой сжать большой объем информации (достаточной для восстановления гиперплоскостей, разделяющих 46 классов) в промежуточное пространство со слишком малой размерностью. Модели удалось вместить бОльшую часть необходимой информации в эти четырехмерные представления, но не всю.
На следующем шаге мы наметим дальнейшие эксперименты.