PLearn 0.1
|
00001 // -*- C++ -*- 00002 00003 // PLearn (A C++ Machine Learning Library) 00004 // Copyright (C) 2004 Jasmin Lapalme 00005 00006 // Redistribution and use in source and binary forms, with or without 00007 // modification, are permitted provided that the following conditions are met: 00008 // 00009 // 1. Redistributions of source code must retain the above copyright 00010 // notice, this list of conditions and the following disclaimer. 00011 // 00012 // 2. Redistributions in binary form must reproduce the above copyright 00013 // notice, this list of conditions and the following disclaimer in the 00014 // documentation and/or other materials provided with the distribution. 00015 // 00016 // 3. The name of the authors may not be used to endorse or promote 00017 // products derived from this software without specific prior written 00018 // permission. 00019 // 00020 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 00021 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00022 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 00023 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00024 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00025 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00026 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00027 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00028 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00029 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 // 00031 // This file is part of the PLearn library. For more information on the PLearn 00032 // library, go to the PLearn Web site at www.plearn.org 00033 00034 #include "IdentityVariable.h" 00035 #include "Var_operators.h" 00036 00037 namespace PLearn { 00038 using namespace std; 00039 00040 00043 PLEARN_IMPLEMENT_OBJECT(IdentityVariable, 00044 "Variable that computes f(x)=x and f'(x)=1.0", 00045 "NO HELP"); 00046 00047 IdentityVariable::IdentityVariable(Variable* input) 00048 : inherited(input, input->length(), input->width()) 00049 {} 00050 00051 void IdentityVariable::recomputeSize(int& l, int& w) const { 00052 if (input) { 00053 l = input->length(); 00054 w = input->width(); 00055 } else 00056 l = w = 0; 00057 } 00058 00059 void IdentityVariable::fprop() { 00060 int l = nelems(); 00061 real* inputptr = input->valuedata; 00062 real* ptr = valuedata; 00063 for(int i=0; i<l; i++) 00064 *ptr++ = *inputptr++; 00065 } 00066 00067 00068 void IdentityVariable::bprop() { 00069 int l = nelems(); 00070 real* inputgradientptr = input->gradientdata; 00071 real* gradientptr = gradientdata; 00072 00073 for(int i=0; i<l; i++) 00074 *inputgradientptr++ += *gradientptr++ * 1.0; 00075 } 00076 00077 void IdentityVariable::bbprop() { 00078 PLERROR("bbprop is not implemented for IdentityVariable"); 00079 } 00080 00081 00082 void IdentityVariable::symbolicBprop() { 00083 PLERROR("symbolicBprop is not implemented for IdentityVariable"); 00084 } 00085 00086 void IdentityVariable::rfprop() { 00087 PLERROR("rfprop is not implemented for IdentityVariable"); 00088 } 00089 00090 } // end of namespace PLearn 00091 00092 00093 /* 00094 Local Variables: 00095 mode:c++ 00096 c-basic-offset:4 00097 c-file-style:"stroustrup" 00098 c-file-offsets:((innamespace . 0)(inline-open . 0)) 00099 indent-tabs-mode:nil 00100 fill-column:79 00101 End: 00102 */ 00103 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=79 :