0

私は非常に基本的な MLP ネットを持っています:

def create_gluon_model(num_features, num_classes):
    # Create Model in Gluon
    net = nn.HybridSequential()
    net.add(nn.Dense(num_features, activation="relu"))
    net.add(nn.Dense(1000, activation="relu"))
    net.add(nn.Dense(num_classes))
    #net.hybridize()
    net.initialize(init=init.Xavier(), ctx=mx.cpu())
    return net

入力データの形状: (32, 20)
出力形状: (32, 4)
ラベル形状: (32, 4) num_classes = 4

トレーニングしようとすると:

def train_vmhnet(net, train_data_loader, valid_data_loader, batch_size=32):
    criterion = gluon.loss.SoftmaxCrossEntropyLoss()
    trainer = gluon.Trainer(net.collect_params(), "sgd", {"learning_rate": 0.1})
    # Start the training.
    for epoch in range(1):
        train_loss, train_acc, valid_acc = 0.0, 0.0, 0.0
        tic = time.time()
        for batch_idx, (data, label) in enumerate(train_data_loader):
            data = data.as_in_context(mx.cpu(0))
            label = label.as_in_context(ctx)
            # forward + backward
            with autograd.record():
                output = net(data)
                loss = criterion(output, label)
            loss.backward()
            # update parameters
            trainer.step(data.shape[0])
            # calculate training metrics
            train_loss += loss.mean().asscalar()
            train_acc += acc(output, label)
        print(epoch)
        # calculate validation accuracy
        for batch_idx, (data, label) in enumerate(valid_data_loader):
            data = data.as_in_context(mx.cpu(0))
            valid_acc += acc(net(data), label)
        print(
            "Epoch %d: loss %.3f, train acc %.3f, test acc %.3f, in %.1f sec"
            % (
                epoch,
                train_loss / len(dataset_train),
                train_acc / len(dataset_train),
                valid_acc / len(dataset_test),
                time.time() - tic,
            )
        )

IM で次のエラーが発生します。

mxnet.base.MXNetError: Shape inconsistent, Provided = [32,4], inferred shape=[32,1]

助けてください

4

1 に答える 1

0

何時間も検索した後、最終的にここで修正を見つけました。1 つのホット エンコーディングを使用している場合は、パラメータ「sparse_label=False」を必ず指定してください。

criterion = gluon.loss.SoftmaxCrossEntropyLoss(sparse_label=False)

これで直りました

于 2020-07-06T13:20:23.437 に答える