pl-nk v0.4.5
Plonk|Plink|Plank are a set of cross-platform C/C++ frameworks for audio software development
plank_NeuralLayer.h
00001 /*
00002  -------------------------------------------------------------------------------
00003  This file is part of the Plink, Plonk, Plank libraries
00004  by Martin Robinson
00005  
00006  http://code.google.com/p/pl-nk/
00007  
00008  Copyright University of the West of England, Bristol 2011-14
00009  All rights reserved.
00010  
00011  Redistribution and use in source and binary forms, with or without
00012  modification, are permitted provided that the following conditions are met:
00013  
00014  * Redistributions of source code must retain the above copyright
00015  notice, this list of conditions and the following disclaimer.
00016  * Redistributions in binary form must reproduce the above copyright
00017  notice, this list of conditions and the following disclaimer in the
00018  documentation and/or other materials provided with the distribution.
00019  * Neither the name of University of the West of England, Bristol nor
00020  the names of its contributors may be used to endorse or promote products
00021  derived from this software without specific prior written permission.
00022  
00023  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00024  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00025  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00026  DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF THE WEST OF ENGLAND, BRISTOL BE
00027  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00028  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00029  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00030  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00032  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  
00034  This software makes use of third party libraries. For more information see:
00035  doc/license.txt included in the distribution.
00036  
00037  -------------------------------------------------------------------------------
00038  
00039  */
00040 
00041 #ifndef PLANK_NEURALLAYER_H
00042 #define PLANK_NEURALLAYER_H
00043 
00044 #include "../json/plank_JSON.h"
00045 #include "../../containers/plank_DynamicArray.h"
00046 #include "plank_NeuralCommon.h"
00047 #include "plank_NeuralNode.h"
00048 #include "plank_NeuralNetwork.h"
00049 
00050 #define PLANK_NEURALLAYERF_JSON_TYPE          "plank::NeuralLayerF"
00051 #define PLANK_NEURALLAYERF_JSON_VERSION       0, 1, 1, 0
00052 #define PLANK_NEURALLAYERF_JSON_NODES         "nodes"
00053 
00054 PLANK_BEGIN_C_LINKAGE
00055 
00063 #if DOXYGEN
00064 
00065 typedef struct PlankNeuralLayerF* PlankNeuralLayerFRef;
00066 #endif
00067 
00074 PlankResult pl_NeuralLayerF_InitNumNodesAndPrevious (PlankNeuralLayerFRef p, PlankNeuralNetworkFRef network, const int numNodes, const int numPreviousNodes);
00075 PlankResult pl_NeuralLayerF_InitNumNodesPreviousWithRange (PlankNeuralLayerFRef p, PlankNeuralNetworkFRef network, const int numNodes, const int numPreviousNodes, const float range);
00076 
00080 PlankResult pl_NeuralLayerF_DeInit (PlankNeuralLayerFRef p);
00081 
00082 PlankResult pl_NeuralLayerF_Reset (PlankNeuralLayerFRef p, const float amount);
00083 PlankResult pl_NeuralLayerF_Randomise (PlankNeuralLayerFRef p, const float amount);
00084 PlankResult pl_NeuralLayerF_SetNode (PlankNeuralLayerFRef p, const int nodeIndex, const float* weights, const float threshold);
00085 PlankResult pl_NeuralLayerF_SetThreshold (PlankNeuralLayerFRef p, const int nodeIndex, const float threshold);
00086 PlankResult pl_NeuralLayerF_SetWeight (PlankNeuralLayerFRef p, const int nodeIndex, const int weightIndex, const float weight);
00087 PlankResult pl_NeuralLayerF_GetNode (PlankNeuralLayerFRef p, const int nodeIndex, float* weights, float* threshold);
00088 PlankResult pl_NeuralLayerF_Propogate (PlankNeuralLayerFRef p, const float* inputs);
00089 PlankResult pl_NeuralLayerF_BackProp (PlankNeuralLayerFRef p, const float* errors, const float actFuncOffset, const float learnRate);
00090 PlankResult pl_NeuralLayerF_GetOutputs (PlankNeuralLayerFRef p, float* outputs);
00091 const float* pl_NeuralLayerF_GetOutputsPtr (PlankNeuralLayerFRef p);
00092 const float* pl_NeuralLayerF_GetAdjustPtr (PlankNeuralLayerFRef p);
00093 int pl_NeuralLayerF_GetNumInputs (PlankNeuralLayerFRef p);
00094 int pl_NeuralLayerF_GetNumOutputs (PlankNeuralLayerFRef p);
00095 PlankResult pl_NeuralLayerF_ToJSON (PlankNeuralLayerFRef p, PlankJSONRef j, const PlankB useBinary);
00096 PlankResult pl_NeuralLayerF_InitFromJSON (PlankNeuralLayerFRef p, PlankNeuralNetworkFRef network, PlankJSONRef j);
00097 
00098 
00099 
00100 
00101 PLANK_END_C_LINKAGE
00102 
00103 #if !DOXYGEN
00104 typedef struct PlankNeuralLayerF
00105 {
00106     PlankDynamicArray nodes;
00107     PlankDynamicArray outputVector;
00108     PlankDynamicArray inputVector;
00109     PlankDynamicArray adjustVector;
00110 } PlankNeuralLayerF;
00111 #endif
00112 
00113 
00114 #endif // PLANK_NEURALLAYER_H
00115 
00116 
 All Classes Functions Typedefs Enumerations Enumerator Properties