void SolidSDF::createWeights(const CornerArray2f & phi, FaceArray2Xf & uw, FaceArray2Yf & vw) { LOG_OUTPUT("Creating solid/fluid weights for velocities."); int iEnd = uw.nx() - 1; for (int j = 0; j < uw.ny(); ++j) { for (int i = 0; i < uw.nx(); ++i) { uw.face<LEFT>(i,j) = _weight(phi.corner<TOP_LEFT>(i,j), phi.corner<BOTTOM_LEFT>(i,j)); } uw.face<RIGHT>(iEnd,j) = _weight(phi.corner<TOP_RIGHT>(iEnd,j), phi.corner<BOTTOM_RIGHT>(iEnd,j)); } int jEnd = vw.ny() - 1; for (int i = 0; i < vw.nx(); ++i) { for (int j = 0; j < vw.ny(); ++j) { vw.face<BOTTOM>(i,j) = _weight(phi.corner<BOTTOM_RIGHT>(i,j), phi.corner<BOTTOM_LEFT>(i,j)); } vw.face<TOP>(i,jEnd) = _weight(phi.corner<TOP_RIGHT>(i,jEnd), phi.corner<TOP_LEFT>(i,jEnd)); } }
void HiddenSynapse::inizialize_weight() { for(int i=0;i<_out;i++) { for(int s=0;s<_in;s++) { _weight(i,s)=((double)(rand())/(double)(RAND_MAX-1))-0.5; if(_weight(i,s)>0.5 || _weight(i,s)<-0.5) cout<<"Peso sballato: "<<_weight(i,s)<<" indice n: "<<i<<" indice l: "<<s<<"\n"; } } }
void HiddenSynapse::adjuste_weight(double rate, int cicle, double momentum) { for (int i=0;i<_out;i++) { for (int j=0;j<_in;j++) { if(cicle==0 && _index==0) _previousDelta(i,j)=0; double tmp=_weight(i,j); _weight(i,j) -=rate*_gradient(i)*in_vect(j)-momentum*(_previousDelta(i,j)); _previousDelta(i,j)=_weight(i,j)-tmp; } } for (int j=0;j<_in;j++) { error(j)=0; } }
double HiddenSynapse::get_input(int i) { DEBUG_MSG("get_input - invect size: " << in_vect.size() << " get param: " <<i); DEBUG_MSG("get_input - weight size: " << _weight.size1() <<"," << _weight.size2()<< " l size: " <<_in); double inp=0; for (int j=0;j<_in;j++) { inp +=in_vect(j)*_weight(i,j); } return inp; }
void HiddenSynapse::set_gradient(int i, double value) { DEBUG_MSG("set_gradient - gradient size: " << _gradient.size() << " get param: " <<i); DEBUG_MSG("set_gradient - weight size: " << _weight.size1() <<"," << _weight.size2()<< " l size: " <<_in); _gradient(i)=value; //double err=0; for (int j=0;j<_in;j++) { error(j) +=_gradient(i)*_weight(i,j); } DEBUG_MSG("set_gradient - error size: " << error.size()); //error(i)=err; DEBUG_MSG("set_gradient - end"); }
int soctree_size(soctree_t *p) { _node_t *root = _root(p); return root ? _weight(root) : -1; }