TraceNode<ElemType>::TraceNode(const ScriptableObjects::IConfigRecordPtr configp) : TraceNode(configp->Get(L"deviceId"), L"<placeholder>") { AttachInputsFromConfig(configp, this->GetExpectedNumInputs()); m_message = (const std::wstring&)configp->Get(L"say"); m_logFirst = configp->Get(L"logFirst"); m_logFrequency = configp->Get(L"logFrequency"); m_logGradientToo = configp->Get(L"logGradientToo"); m_formattingOptions = WriteFormattingOptions(*configp); m_onlyUpToRow = configp->Get(L"onlyUpToRow"); m_onlyUpToT = configp->Get(L"onlyUpToT"); }
LearnableParameter<ElemType>::LearnableParameter(const ScriptableObjects::IConfigRecordPtr configp) : LearnableParameter(configp->Get(L"deviceId"), L"<placeholder>", configp->Get(L"shape")) { // TODO: Change dimensions to take a generic tensor instead. That will be a (minor) breaking change that will require fix-ups when converting from NDL to BrainScript. AttachInputsFromConfig(configp, this->GetExpectedNumInputs()); // parameters[rows, [cols=1]] plus other optional parameters (learningRateMultiplier=[1|0|float], init=[uniform|gaussian|fixedvalue], initValueScale=[1|float], value=[0|float]) if (configp->Exists(L"learningRateMultiplier")) SetLearningRateMultiplier(configp->Get(L"learningRateMultiplier")); else if (configp->Exists(L"needsGradient") || configp->Exists(L"needGradient") || configp->Exists(L"computeGradient")) InvalidArgument("Deprecated parameter names needsGradient|needGradient|computeGradient are not supported in BrainScript. Use learningRateMultiplier instead."); wstring initString = configp->Get(L"init"); if (initString == L"fixedValue") Value().SetValue((ElemType) configp->Get(L"value")); else if (initString == L"uniform" || initString == L"gaussian") { // TODO: add these options also to old NDL static unsigned long randomSeed = 1; int forcedRandomSeed = configp->Get(L"randomSeed"); // forcing a specific random seed is useful for testing to get repeatable initialization independent of evaluation order InitRandom((initString == L"uniform"), forcedRandomSeed < 0 ? randomSeed++ : (unsigned long) forcedRandomSeed, configp->Get(L"initValueScale"), configp->Get(L"initOnCPUOnly")); } else if (initString == L"fromFile") { wstring initFromFilePath = configp->Get(L"initFromFilePath"); if (initFromFilePath.empty()) RuntimeError("initFromFilePath parameter must be provided when using \"fromFile\" initialization method"); InitFromFile(initFromFilePath); } else if (initString == L"fromLiteral") { wstring initFromLiteral = configp->Get(L"initFromLiteral"); if (initFromLiteral.empty()) RuntimeError("initFromLiteral parameter must be provided when using \"fromLiteral\" initialization method"); size_t numRows, numCols; auto array = File::LoadMatrixFromStringLiteral<ElemType>(msra::strfun::utf8(initFromLiteral), numRows, numCols); InitFromArray(array, numRows, numCols); } else RuntimeError("init must be one of the values of [ uniform | gaussian | fixedValue | fromFile ]"); }