refactoring recurent

This commit is contained in:
2016-01-28 20:49:47 +01:00
parent 3c26c9641c
commit 13b179dd57
9 changed files with 229 additions and 61 deletions

View File

@@ -29,4 +29,6 @@ $(LIBNAME).a: $(OBJFILES)
nm --demangle $(LIBNAME).a > $(LIBNAME).nm
clean:
@rm -f ./*.o ./*.so ./*.a ./*.nm ./*/*.o
@rm -rf *.o ./*.so ./*.a ./*.nm ./*/*.o
@rm -rf *.o ./*.so ./*.a ./*.nm ./*/*.o
@rm -f $(OBJFILES)

View File

@@ -5,24 +5,24 @@ std::vector<float> NeuralNetwork::Recurrent::Network::computeOutput(const std::v
std::vector<float> outputs(neuronSize);
for(size_t i=0;i<inputSize;i++) {
outputs[i]=input[i];
outputs[i+1]=input[i];
}
for(unsigned int iter=0;iter< iterations;iter++) {
for(size_t i=inputSize;i<neuronSize;i++) {
outputs[i]=neurons[i].output();
for(size_t i=inputSize+1;i<neuronSize;i++) {
outputs[i]=neurons[i]->output();
}
// update neurons
for(size_t i=inputSize;i<neuronSize;i++) {
neurons[i](outputs);
for(size_t i=inputSize+1;i<neuronSize;i++) {
neurons[i]->operator()(outputs);
}
}
std::vector<float> ret;
for(size_t i=0;i<outputSize;i++) {
ret.push_back(neurons[i+inputSize].output());
ret.push_back(neurons[i+inputSize+1]->output());
}
return ret;
@@ -36,15 +36,47 @@ void NeuralNetwork::Recurrent::Network::stringify(std::ostream& out) const {
out << "\t\"inputs\":" << inputSize << ",\n";
out << "\t\"outputs\":" << outputSize << ",\n";
out << "\t\"neurons\":[";
out << "\t\"neurons\":[\n";
for(size_t i=0;i<neurons.size();i++) {
if(i!=0)
out << ",\n";
out << neurons[i].stringify("\t\t");
out << neurons[i]->stringify("\t\t");
}
out << "\n\t]\n";
out <<"}";
}
}
NeuralNetwork::Recurrent::Network NeuralNetwork::Recurrent::Network::connectWith(const NeuralNetwork::Recurrent::Network &r) const {
}
/*
NeuralNetwork::Recurrent::Network NeuralNetwork::Recurrent::Network::connectWith(const NeuralNetwork::Recurrent::Network &r) const {
if(outputSize!=r.inputSize) {
//TODO: throw exception
}
NeuralNetwork::Recurrent::Network newNetwork(inputSize,r.outputSize,(neurons.size()-1-inputSize)+(r.neurons.size()-1-r.inputSize-r.outputSize));
// update output neurons first
for(size_t i=0;i<r.outputSize;i++) {
size_t index=1+newNetwork.inputSize+i;
delete newNetwork.neurons[index];
newNetwork.neurons[index]= r.neurons[1+r.inputSize+i]->clone();
Neuron* n= newNetwork.neurons[index];
for(int i=0;i<newNetwork.inputSize;i++) {
n->setWeight(newNetwork.+i,0.0);
}
for(int i=0;i<r.inputSize;i++) {
n->setWeight(1+newNetwork.inputSize+newNetwork.outputSize,0.0);
}
}
return newNetwork;
}
*/

View File

@@ -3,7 +3,6 @@
std::string NeuralNetwork::Recurrent::Neuron::stringify(const std::string &prefix) const {
std::ostringstream out;
out.precision(std::numeric_limits<float>::digits10+1);
out <<std::setprecision(std::numeric_limits<float>::digits10+1);
out << prefix << "{\n";
out << prefix << "\t\"class\": \"NeuralNetwork::Recurrent::Neuron\",\n";
@@ -13,13 +12,17 @@ std::string NeuralNetwork::Recurrent::Neuron::stringify(const std::string &prefi
out << prefix << "\t\"value\": " << value() << ",\n";
out << prefix << "\t\"activationFunction\": " << activation->stringify() <<",\n";
out << prefix << "\t\"basisFunction\": " << basis->stringify() <<",\n";
out << prefix << "\t\"weights\": [";
out << prefix << "\t\"weights\": {";
bool first=true;
for(size_t j=0;j<weights.size();j++) {
if(j!=0)
out << ", ";
out << weights[j];
if(weights[j]!= 0.0) {
if(!first)
out << ", ";
first=false;
out << "\"" << j << "\": " << weights[j];
}
}
out << "]\n";
out << "}\n";
out << prefix << "}";
return out.str();
}