{"record":{"id":"dcf74febcc680581","repo":"lutzroeder/netron","slug":"unknown-field-tag-this-location-dcf74f","errorCode":null,"errorMessage":"Unknown field '${tag}'${this.location()}","messagePattern":"Unknown field '(.+?)'(.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"source/caffe.js","lineNumber":95,"sourceCode":"                        return value;\n                    };\n                }\n                netParameter = caffe.proto.NetParameter.decodeText(reader);\n            } catch (error) {\n                const message = error && error.message ? error.message : error.toString();\n                throw new caffe.Error(`File text format is not caffe.NetParameter (${message.replace(/\\.$/, '')}).`);\n            }\n            return openModel(context, netParameter);\n        };\n        switch (context.type) {\n            case 'caffe.pbtxt.solver': {\n                const reader = await context.read('protobuf.text');\n                reader.field = function(tag, message) {\n                    if (message instanceof caffe.proto.SolverParameter) {\n                        message[tag] = this.read();\n                        return;\n                    }\n                    throw new Error(`Unknown field '${tag}'${this.location()}`);\n                };\n                const solver = caffe.proto.SolverParameter.decodeText(reader);\n                if (solver.net_param) {\n                    return openModel(context, solver.net_param);\n                }\n                let name = solver.net || solver.train_net;\n                name = name.split('/').pop();\n                try {\n                    const content = await context.fetch(name);\n                    return await openNetParameterText(context, name, content);\n                } catch (error) {\n                    const message = error.message ? error.message : error.toString();\n                    throw new caffe.Error(`Failed to load '${name}' (${message.replace(/\\.$/, '')}).`);\n                }\n            }\n            case 'caffe.pbtxt': {\n                return await openNetParameterText(context, context.identifier, context);\n            }","sourceCodeStart":77,"sourceCodeEnd":113,"githubUrl":"https://github.com/lutzroeder/netron/blob/d8a543f5f847ef596aa58858d6adcf5d75545f7f/source/caffe.js#L77-L113","documentation":"Thrown when decoding a Caffe solver prototxt: the SolverParameter.decodeText reader hits a key that is not a recognized SolverParameter field. Unlike the NetParameter reader (which only accepts known fields for other message types), this handler rejects every unknown key outright with the parser location appended.","triggerScenarios":"Loading a solver.prototxt via the Caffe open() path where the text contains fields outside the SolverParameter schema — e.g. snapshot_diff, layer_wise_reduce, or custom fork extensions; also typos and indentation errors that make a value look like a key.","commonSituations":"Solver files written by newer Caffe versions or forks (e.g. NVCaffe extra flags), hand-edited solvers, or accidentally pointing the loader at a train_val prototxt (a NetParameter, not a SolverParameter).","solutions":["Confirm the file is actually a solver definition, not a network train_val prototxt","Check the flagged line for fields your Caffe schema version doesn't define and remove/rename them","Regenerate the solver prototxt using the caffe version whose schema matches the library's bundled caffe.proto","Prepend '#'-comments to strip experimental fields before loading"],"exampleFix":"# before\nnet: \"train_val.prototxt\"\nlayer_wise_reduce: true   # unknown to older schema\n\n# after\nnet: \"train_val.prototxt\"\n# layer_wise_reduce: true","handlingStrategy":"try-catch","validationCode":"// Distinguish solver vs net prototxt before loading\nconst isSolver = /^\\s*net\\s*:/m.test(text) || /^\\s*base_lr\\s*:/m.test(text);\nif (!isSolver) throw new Error('Not a solver.prototxt');","typeGuard":null,"tryCatchPattern":"try {\n  await caffe.open(solverFile);\n} catch (e) {\n  if (/Unknown field/.test(e.message)) {\n    // report offending line from location() and suggest removing the field\n  } else throw e;\n}","preventionTips":["Don't point the loader at train_val prototxts when a solver is expected","Keep solver files minimal and version-matched to the schema","Diff solver files against a known-good template"],"tags":["caffe","solver","prototxt","unknown-field"],"backgroundTag":"protobuf-unknown-field","analyzedSha":"d8a543f5f847ef596aa58858d6adcf5d75545f7f","analyzedAt":"2026-08-27T19:21:42.082Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}