我正在尝试使用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 操作只能在没有小批量数据的张量上操作(无布局)”
这里有什么问题?