9 #include "principal_components_layer.h"
31 set(new_inputs_number, new_principal_components_number);
39 set(new_principal_components_layer);
64 return "NoPrincipalComponents";
68 return "PrincipalComponents";
74 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
75 <<
"string write_principal_components_method() const method.\n"
76 <<
"Unknown principal components method.\n";
78 throw logic_error(buffer.str());
90 return "no principal components";
94 return "principal components";
100 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
101 <<
"string write_principal_components_method_text() const method.\n"
102 <<
"Unknown principal components method.\n";
104 throw logic_error(buffer.str());
157 size_t PrincipalComponentsLayer::get_neurons_number()
const
245 case NoPrincipalComponents:
250 case PrincipalComponents:
258 ostringstream buffer;
260 buffer <<
"OpenNN Exception: ScalingLayer class.\n"
261 <<
"string write_expression() const method.\n"
262 <<
"Unknown principal components method.\n";
264 throw logic_error(buffer.str());
610 ostringstream buffer;
612 file_stream.OpenElement(
"PrincipalComponentsLayer");
616 const size_t inputs_number = get_inputs_number();
618 file_stream.OpenElement(
"InputsNumber");
621 buffer << inputs_number;
623 file_stream.
PushText(buffer.str().c_str());
629 const size_t principal_components_number = get_principal_components_number();
631 file_stream.OpenElement(
"PrincipalComponentsNumber");
634 buffer << principal_components_number;
636 file_stream.
PushText(buffer.str().c_str());
640 if(principal_components_number != 0)
644 file_stream.OpenElement(
"Means");
647 buffer << get_means();
649 file_stream.
PushText(buffer.str().c_str());
655 file_stream.OpenElement(
"ExplainedVariance");
658 buffer << get_explained_variance();
660 file_stream.
PushText(buffer.str().c_str());
666 for(
size_t i = 0; i < inputs_number; i++)
668 file_stream.OpenElement(
"PrincipalComponent");
670 file_stream.
PushAttribute(
"Index", static_cast<unsigned>(i)+1);
675 buffer << principal_components.get_row(i);
677 file_stream.
PushText(buffer.str().c_str());
684 file_stream.OpenElement(
"PrincipalComponentsMethod");
685 file_stream.
PushText(write_principal_components_method().c_str());
692 file_stream.OpenElement(
"PrincipalComponentsMethod");
693 file_stream.
PushText(write_principal_components_method().c_str());
708 ostringstream buffer;
710 const tinyxml2::XMLElement* principal_components_layer_element = document.FirstChildElement(
"PrincipalComponentsLayer");
712 if(!principal_components_layer_element)
714 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
715 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
716 <<
"Principal components layer element is nullptr.\n";
718 throw logic_error(buffer.str());
723 const tinyxml2::XMLElement* inputs_number_element = principal_components_layer_element->FirstChildElement(
"InputsNumber");
725 if(!inputs_number_element)
727 buffer <<
"OpenNN Exception: ScalingLayer class.\n"
728 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
729 <<
"Inputs number element is nullptr.\n";
731 throw logic_error(buffer.str());
734 const size_t inputs_number = static_cast<size_t>(atoi(inputs_number_element->GetText()));
736 set_inputs_number(inputs_number);
740 const tinyxml2::XMLElement* principal_components_number_element = principal_components_layer_element->FirstChildElement(
"PrincipalComponentsNumber");
742 if(!principal_components_number_element)
744 buffer <<
"OpenNN Exception: ScalingLayer class.\n"
745 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
746 <<
"Principal components number element is nullptr.\n";
748 throw logic_error(buffer.str());
751 const size_t principal_components_number = static_cast<size_t>(atoi(principal_components_number_element->GetText()));
753 set_principal_components_number(principal_components_number);
764 if(principal_components_number != 0)
768 const tinyxml2::XMLElement* means_element = principal_components_layer_element->FirstChildElement(
"Means");
772 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
773 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
774 <<
"Means element is nullptr.\n";
776 throw logic_error(buffer.str());
780 const char* means_text = means_element->GetText();
785 new_means.
parse(means_text);
789 set_means(new_means);
791 catch(
const logic_error& e)
793 cerr << e.what() <<endl;
800 const tinyxml2::XMLElement* explained_variance_element = principal_components_layer_element->FirstChildElement(
"ExplainedVariance");
802 if(!explained_variance_element)
804 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
805 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
806 <<
"ExplainedVariance element is nullptr.\n";
808 throw logic_error(buffer.str());
812 const char* explained_variance_text = explained_variance_element->GetText();
814 if(explained_variance_text)
817 new_explained_variance.
parse(explained_variance_text);
821 set_explained_variance(new_explained_variance);
823 catch(
const logic_error& e)
825 cerr << e.what() <<endl;
832 principal_components.set(inputs_number, inputs_number);
838 for(
size_t i = 0; i < inputs_number; i++)
841 start_element = principal_components_element;
843 if(!principal_components_element)
845 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
846 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
847 <<
"Principal component number " << i+1 <<
" is nullptr.\n";
849 throw logic_error(buffer.str());
856 buffer <<
"OpenNN Exception: PrincipalComponentsLayer class.\n"
857 <<
"void from_XML(const tinyxml2::XMLDocument&) method.\n"
858 <<
"Index " << index <<
" is not correct.\n";
860 throw logic_error(buffer.str());
865 const char* principal_component_text = principal_components_element->GetText();
867 if(principal_component_text)
870 principal_component.
parse(principal_component_text);
874 set_principal_component(i, principal_component);
876 catch(
const logic_error& e)
878 cerr << e.what() <<endl;
886 const tinyxml2::XMLElement* principal_components_method_element = principal_components_layer_element->FirstChildElement(
"PrincipalComponentsMethod");
888 if(principal_components_method_element)
890 string new_method = principal_components_method_element->GetText();
894 set_principal_components_method(new_method);
896 catch(
const logic_error& e)
898 cerr << e.what() << endl;