2

我正在尝试使用ONNX 模型动物园中的 ResNet-50 模型并在 CNTK 中加载和训练它以执行图像分类任务。让我感到困惑的第一件事是,批处理轴(不确定它的正式名称是什么,动态轴?)在此模型中设置为 1:

这是为什么?难道不能简单地是 [3x224x224] 吗?例如,在此模型中,输入如下所示:

在此处输入图像描述

要加载模型并使用我自己的 Dense 层,我使用以下代码:

def create_model(num_classes, input_features, freeze=False):
    base_model = load_model("restnet-50.onnx", format=ModelFormat.ONNX)
    feature_node = find_by_name(base_model, "gpu_0/data_0")
    last_node = find_by_uid(base_model, "Reshape2959")

    substitutions = {
        feature_node : placeholder(name='new_input')
    }

    cloned_layers = last_node.clone(CloneMethod.clone, substitutions)
    cloned_out = cloned_layers(input_features)
    z = Dense(num_classes, activation=softmax, name="prediction") (cloned_out)
    return z

对于我使用(缩短)的培训:

# datasets = list of classes
feature = input_variable(shape=(1, 3, 224, 224))
label = input_variable(shape=(1,3))
model = create_model(len(datasets), feature)
loss = cross_entropy_with_softmax(model, label)

# some definitions for learner, epochs, ProgressPrinters missing

for epoch in range(epochs):
    loss.train((X_current,y_current), parameter_learners=[learner], callbacks=[progress_printer])

X_current 是单个图像, y_current 是相应的类标签,它们都编码为具有以下形状的 numpy 数组

X_current.shape
(1, 3, 224, 224)

y_current.shape
(1, 3)

当我尝试训练模型时,我得到

“ValueError:ToBatchAxis7504 ToBatchAxisNode 操作只能在没有小批量数据的张量上操作(无布局)”

这里有什么问题?

4

0 回答 0