python - 如何在自动编码器中使用 sparse_categorical_cross_entropy?
问题描述
我正在尝试训练自动编码器,由于内存问题,我决定停止使用单热编码,而是尝试使用 SparseCategoricalCrossentropy()。不幸的是,在尝试训练我得到的模型后:tensorflow.python.framework.errors_impl.InvalidArgumentError: logits and labels must have the same first dimension, got logits shape [512,32] and labels shape [2560]
from keras.metrics import SparseCategoricalAccuracy
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from tensorflow.keras.losses import *
import numpy as np
from tensorflow.python.keras.optimizer_v1 import RMSprop
BATCH_SIZE = 128
EPOCHS = 10
numpy_dataset = np.create
def create_autoencoder(sequence_length, latent_dim):
# Define encoder input shape
encoder_input = Input(shape=sequence_length, batch_size=BATCH_SIZE)
latent = Input(shape=latent_dim)
encoded = Dense(latent_dim, activation='tanh')(encoder_input)
decoded = Dense(sequence_length, activation='sigmoid')(latent)
encoder = Model(inputs=encoder_input, outputs=encoded, name="encoder")
decoder = Model(inputs=latent, outputs=decoded, name="decoder")
autoencoder = Model(inputs=encoder_input, outputs=decoder(encoded), name="autoencoder")
return autoencoder
def data_generator(numpy_dataset, steps_per_epoch):
# Computes the number of elements that should be removed so that the training data can be split
# equally between batches
# elements2remove = len(train_notes) - steps_per_epoch * BATCH_SIZE
# steps_per_epoch =
for i in range(EPOCHS):
for batch in np.array_split(numpy_dataset, steps_per_epoch):
yield batch, batch
def train(model, numpy_dataset):
steps_per_epoch = len(numpy_dataset) // BATCH_SIZE
model.compile(loss=SparseCategoricalCrossentropy(),
optimizer=RMSprop(learning_rate=0.01),
metrics=[SparseCategoricalAccuracy()])
model.fit(x=data_generator(numpy_dataset=numpy_dataset, steps_per_epoch=steps_per_epoch),
epochs=EPOCHS,
batch_size=BATCH_SIZE,
steps_per_epoch=steps_per_epoch)
autoencoder = create_autoencoder(32, 2)
train(autoencoder, numpy_dataset)
我简化了代码,使其更清晰。所以让我们说,在我创建的代码的前面numpy_dataset
,它属于shape=(2560, 32)
and dtype=int32
。我该如何解决这个问题?
解决方案
推荐阅读
- python - 如何在 Matplotlib 中设置颜色范围?
- rust - 如何在编译时确保类型将序列化为 JSON 数组?
- php - 如何在 Drupal 7 中将表单添加为菜单项?
- r - 如何在拥挤的 tmap 图例中修复垂直空间 [R]
- python - 在 Python 中创建和排序二维列表
- python - 如何将函数应用于需要 Pandas 中的行索引的数据框?
- objective-c - 随机生成器的随机性稍差
- graphql - 有没有办法在 graphQL 中对查询进行分组?
- python - 带有类对象列表的 psycopg2 execute_values
- hibernate - Hibernate Envers:加载修订版时列表中出现空值