馬蹄鏈智慧合約DAPP開發需求丨馬蹄鏈智慧合約DAPP質押挖礦系統開發(開發案例)

xiaofufu發表於2023-03-08

  什麼是DAPP?DAPP是Decentralized Application的縮寫,中文叫分散式應用/去中心化應用。通常來說,不同的DAPP會採用不同的底層技術開發平臺和共識機制,或者自行釋出代幣。


  以太坊中一般會認為智慧合約就是DAPP,當然更準確的可以認為智慧合約相當於伺服器後臺,另外要實現使用者體驗,還需要UI互動介面,透過RPC與後臺對接,那麼DAPP系統開發就是開發包含完整的智慧合約和UI互動介面的DAPP。


  int QuantizeConvPerChannel(const float*weight,const int size,const float*bias,int8_t*quantizedWeight,


  int32_t*quantizedBias,float*scale,const std::vector<float>&inputScale,


  const std::vector<float>&outputScale,std::string method,float weightClampValue,bool mergeChannel){


  const int inputChannels=inputScale.size();


  const int outputChannels=outputScale.size();


  const int icXoc=inputChannels*outputChannels;


  DCHECK(size%icXoc==0)<<"Input Data Size Error!";


  std::vector<float>quantizedWeightScale(outputChannels);


  float inputScalexWeight=1.0f;


  if(mergeChannel){ 本文由系統開發對接唯:MrsFu123編輯整理釋出。


  if(method=="MAX_ABS"){


  SymmetricQuantizeWeight(weight,size,quantizedWeight,quantizedWeightScale.data(),outputChannels,weightClampValue);


  }

  else if(method=="ADMM"){


  QuantizeWeightADMM(weight,size,quantizedWeight,quantizedWeightScale.data(),outputChannels,weightClampValue);


  }


  inputScalexWeight=inputScale[0];


  }else{


  const int kernelSize=size/icXoc;


  const int ocStride=size/outputChannels;


  //每個權重都乘上對應scale


  std::vector<float>weightMultiByInputScale(size);


  for(int oc=0;oc<outputChannels;++oc){


  for(int ic=0;ic<inputChannels;++ic){


  for(int i=0;i<kernelSize;++i){


  const int index=oc*ocStride+ic*kernelSize+i;


  weightMultiByInputScale[index]=inputScale[ic]*weight[index];


  }


  }


  }開發需求及分析:yy625019


  if(method=="MAX_ABS"){


  SymmetricQuantizeWeight(weightMultiByInputScale.data(),size,quantizedWeight,quantizedWeightScale.data(),outputChannels,weightClampValue);


  }


  else if(method=="ADMM"){


  QuantizeWeightADMM(weightMultiByInputScale.data(),size,quantizedWeight,quantizedWeightScale.data(),outputChannels,weightClampValue);


  }


  }


  for(int i=0;i<outputChannels;++i){


  if(fabs(outputScale<i>)<=1e-6){


  scale<i>=0.0f;


  }else{


  scale<i>=inputScalexWeight*quantizedWeightScale<i>/outputScale[0];


  }


  }


  if(bias){


  for(int i=0;i<outputChannels;++i){


  if(fabs(inputScalexWeight)<=1e-6||fabs(quantizedWeightScale<i>)<=1e-6){


  quantizedBias<i>=0;


  }else{


  quantizedBias<i>=static_cast<int32_t>(bias<i>/(inputScalexWeight*quantizedWeightScale<i>));


  }


  }


  }


  return 0;


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2938697/,如需轉載,請註明出處,否則將追究法律責任。

相關文章