diff --git a/build.bat b/build.bat index dc2a2a677106d502ab11389c2242265a51feff55..ef36e9b22ba5ea45c23debf894a153bf245ced3d 100644 --- a/build.bat +++ b/build.bat @@ -10,10 +10,13 @@ set DEPENDENCIES_LINK_TYPE=static rem Path to boost directory, in case you have it already installed on your system set BOOST_ROOT=%cd%\external_dependencies\boost +set LIB4NEURO_INCLUDE_DIR=%cd%\include + rem Build type (Release/Debug) set BUILD_TYPE=Debug + rem Should we rebuild BOOST? (yes/no) -set REBUILD_BOOST=yes +set REBUILD_BOOST=no rem Should we build the examples? (yes/no) set BUILD_EXAMPLES=yes @@ -34,5 +37,5 @@ rem Example: "MSYS Makefiles", "MinGW Makefiles", "NMake Makefiles" set MAKEFILE_GENERATOR="Visual Studio 15 2017 Win64" call clean.bat -cmake -G %MAKEFILE_GENERATOR% -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib . +cmake -G %MAKEFILE_GENERATOR% -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=%DEPENDENCIES_LINK_TYPE% -DLIB4NEURO_INCLUDE_DIR=%LIB4NEURO_INCLUDE_DIR% . cmake --build . --config %BUILD_TYPE% && (echo (Build complete.); echo (For examples have a look at the folder build/examples.)) || (echo "Build finished with errors!") diff --git a/build.sh b/build.sh index 8dbebd5c00b432ef858a9ac7a2eb2ea3156124d1..a1fd074440bb6fe0d3e426d491e605817f865029 100755 --- a/build.sh +++ b/build.sh @@ -5,6 +5,7 @@ #------------# BOOST_ROOT=${PWD}/external_dependencies/boost +LIB4NEURO_INCLUDE_DIR=${PWD}/include # # Modular build parameters @@ -34,5 +35,5 @@ $(pwd)/clean.sh git submodule init git submodule update --remote -cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=$(pwd)/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} . +cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBOOST_LIBRARYDIR=${BOOST_LIBRARYDIR} -DBOOST_INCLUDEDIR=${BOOST_INCLUDEDIR} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=${PWD}/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} -DLIB4NEURO_INCLUDE_DIR=${LIB4NEURO_INCLUDE_DIR} . cmake --build . --config ${BUILD_TYPE} -- -j${N_CORES} && (tput setaf 2; echo "Build complete."; echo "For examples have a look at the folder build/bin/examples."; tput sgr 0; ) || (tput setaf 1; echo "Build finished with errors!"; tput sgr 0; exit 1;) diff --git a/build_scripts/linux/linux_gcc_build_x64_debug_local.sh b/build_scripts/linux/linux_gcc_build_x64_debug_local.sh index 44282300984e048067eaa05838eb09e77fe9bca7..a703a5a901a797d95bdc0f7b4f7da59f70d49f26 100755 --- a/build_scripts/linux/linux_gcc_build_x64_debug_local.sh +++ b/build_scripts/linux/linux_gcc_build_x64_debug_local.sh @@ -3,6 +3,7 @@ clear BOOST_ROOT=${PWD}../../external_dependencies/boost +LIB4NEURO_INCLUDE_DIR=${PWD}/../../include # Should we rebuild BOOST? (yes/no) REBUILD_BOOST=no @@ -96,7 +97,7 @@ then cd ../.. - cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBOOST_LIBRARYDIR=${BOOST_LIBRARYDIR} -DBOOST_INCLUDEDIR=${BOOST_INCLUDEDIR} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=${PWD}/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} . || ( echo "${RED}Makefile preparation finished with errors${NC}!"; BUILD_ERROR_OCCURED=1; ) + cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBOOST_LIBRARYDIR=${BOOST_LIBRARYDIR} -DBOOST_INCLUDEDIR=${BOOST_INCLUDEDIR} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=${PWD}/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} -DLIB4NEURO_INCLUDE_DIR=${LIB4NEURO_INCLUDE_DIR} . || ( echo "${RED}Makefile preparation finished with errors${NC}!"; BUILD_ERROR_OCCURED=1; ) if [ $BUILD_ERROR_OCCURED = "0" ] then diff --git a/build_scripts/linux/linux_gcc_build_x64_debug_system.sh b/build_scripts/linux/linux_gcc_build_x64_debug_system.sh index 2523d5f9d8b1911d8fa623f0ccaf934ae1069565..db056b4c1e12af835a96b064f520a0b77cec95be 100755 --- a/build_scripts/linux/linux_gcc_build_x64_debug_system.sh +++ b/build_scripts/linux/linux_gcc_build_x64_debug_system.sh @@ -3,6 +3,7 @@ clear BOOST_ROOT=${PWD}../../external_dependencies/boost +LIB4NEURO_INCLUDE_DIR=${PWD}/../../include # Should we rebuild BOOST? (yes/no) REBUILD_BOOST=no @@ -95,7 +96,7 @@ then cd ../.. - cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBOOST_LIBRARYDIR=${BOOST_LIBRARYDIR} -DBOOST_INCLUDEDIR=${BOOST_INCLUDEDIR} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=${PWD}/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} . + cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=${CXX_COMPILER} -DCMAKE_C_COMPILER=${C_COMPILER} -DBOOST_LIBRARYDIR=${BOOST_LIBRARYDIR} -DBOOST_INCLUDEDIR=${BOOST_INCLUDEDIR} -DBUILD_TESTS=${BUILD_TESTS} -DBUILD_EXAMPLES=${BUILD_EXAMPLES} -DBUILD_LIB=${BUILD_LIB} -DLIB4NEURO_DIR=${PWD}/build/lib -DDEPENDENCIES_LINK_TYPE=${DEPENDENCIES_LINK_TYPE} -DLIB4NEURO_INCLUDE_DIR=${LIB4NEURO_INCLUDE_DIR} . echo "Building the '${CYAN}lib4neuro${NC}' project for ${WHITE}Debug${NC} (building)" ( cmake --build . --config Debug -- -j${N_CORES} ) && ( echo "${GREEN}Build complete${NC}." ) || ( echo "${RED}Build finished with errors${NC}!"; exit 1; ) diff --git a/build_scripts/windows/win_VS_build_x64_debug.bat b/build_scripts/windows/win_VS_build_x64_debug.bat index 4ce26b3efda300d02d832fa314f7a38e6c7b2070..008b37e45149aabb0676dd166e47439eb3553d93 100644 --- a/build_scripts/windows/win_VS_build_x64_debug.bat +++ b/build_scripts/windows/win_VS_build_x64_debug.bat @@ -12,7 +12,8 @@ set "BUILD_SOMETHING_LIB=" rem call VsDevCmd.bat -set BOOST_ROOT=%cd%../../external_dependencies/boost +set BOOST_ROOT=%cd%..\..\external_dependencies\boost +set LIB4NEURO_INCLUDE_DIR=%cd%..\..\include rem Should we rebuild BOOST? (yes/no) set REBUILD_BOOST=yes @@ -89,8 +90,7 @@ IF "%BUILD_SOMETHING_LIB%"=="yes" ( set MAKEFILE_GENERATOR="Visual Studio 15 2017 Win64" cd ..\.. - cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=%DEPENDENCIES_LINK_TYPE% . || goto error_occured_lib - + cmake -G %MAKEFILE_GENERATOR% -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=%DEPENDENCIES_LINK_TYPE% -DLIB4NEURO_INCLUDE_DIR=%LIB4NEURO_INCLUDE_DIR% . || goto error_occured_lib title Building the 'lib4neuro' project for Debug [building] cmake --build . --config Debug && echo "Build complete." || goto error_occured_lib diff --git a/include/4neuro.h b/include/4neuro.h index 486fa50b13c33a9370b602f0feccc7291681da9d..e6810f10bae7b468af70f853d7ede88af97ba3a4 100644 --- a/include/4neuro.h +++ b/include/4neuro.h @@ -21,6 +21,7 @@ #include "../src/constants.h" #include "../src/settings.h" #include "../src/message.h" +#include "../src/LearningMethods/GradientDescent.h" #endif //INC_4NEURO_4NEURO_H diff --git a/src/LearningMethods/GradientDescent.h b/src/LearningMethods/GradientDescent.h index 4d5db3a51f0f07f6bc63327624cb8f655d450e53..07dbed03ca9d737397d39cd53bb34585dfa3a54f 100644 --- a/src/LearningMethods/GradientDescent.h +++ b/src/LearningMethods/GradientDescent.h @@ -8,6 +8,7 @@ #ifndef INC_4NEURO_GRADIENTDESCENT_H #define INC_4NEURO_GRADIENTDESCENT_H +#include "../constants.h" #include "ILearningMethods.h" #include "../ErrorFunction/ErrorFunctions.h" diff --git a/src/LearningMethods/ParticleSwarm.h b/src/LearningMethods/ParticleSwarm.h index f4c6d084b49ee25fb831c72d3dee1e6296e0cb51..28159fa3ebd76e31d72d752c13085c2ddb74c01a 100644 --- a/src/LearningMethods/ParticleSwarm.h +++ b/src/LearningMethods/ParticleSwarm.h @@ -51,7 +51,7 @@ public: * * @param f_dim */ - LIB4NEURO_API Particle(ErrorFunction* ef, double *domain_bounds); + LIB4NEURO_API Particle(ErrorFunction* ef, std::vector<double> *domain_bounds); LIB4NEURO_API ~Particle( ); /** @@ -168,7 +168,7 @@ public: * @param iter_max */ //TODO make domain_bounds constant - LIB4NEURO_API ParticleSwarm( + LIB4NEURO_API explicit ParticleSwarm( std::vector<double> *domain_bounds, double c1 = 1.711897, double c2 = 1.711897, diff --git a/src/Network/NeuralNetwork.h b/src/Network/NeuralNetwork.h index 224a4137a2244d01357d0148d747b76f5889095a..1a67cc00b5ae8ac71341eab0b5b20c10a830cffc 100644 --- a/src/Network/NeuralNetwork.h +++ b/src/Network/NeuralNetwork.h @@ -235,12 +235,17 @@ public: /** * */ - LIB4NEURO_API void randomize_weights(); + LIB4NEURO_API virtual void randomize_weights(); /** * */ - LIB4NEURO_API void randomize_biases(); + LIB4NEURO_API virtual void randomize_biases(); + + /** + * + */ + LIB4NEURO_API virtual void randomize_parameters(); /** * @@ -304,13 +309,13 @@ public: * * @return */ - LIB4NEURO_API std::vector<double>* get_parameter_ptr_weights(); + LIB4NEURO_API virtual std::vector<double>* get_parameter_ptr_weights(); /** * * @return */ - LIB4NEURO_API std::vector<double>* get_parameter_ptr_biases(); + LIB4NEURO_API virtual std::vector<double>* get_parameter_ptr_biases(); /** * diff --git a/src/Network/NeuralNetworkSum.h b/src/Network/NeuralNetworkSum.h index c48056991093c78628b012dcf4c246b6212ac601..3631e7348030a7838eee8685a696d4f5bdd1fe49 100644 --- a/src/Network/NeuralNetworkSum.h +++ b/src/Network/NeuralNetworkSum.h @@ -31,6 +31,14 @@ public: LIB4NEURO_API void add_network( NeuralNetwork *net, std::string expression_string ); + /** + * + * @param input + * @param output + * @param custom_weights_and_biases + */ + LIB4NEURO_API void eval_single(std::vector<double> &input, std::vector<double> &output, std::vector<double> *custom_weights_and_biases = nullptr) override; + /** * * @param error_derivative diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index 6706c0a05e43a53fad7044f2c54d72bca19b8457..296a1693af227ffe3de2d54af52a71297439f627 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -3,7 +3,7 @@ ############ add_executable(seminar seminar.cpp) -target_link_libraries(seminar lib4neuro) +target_link_libraries(seminar PUBLIC lib4neuro) add_executable(test_cases main.cpp) target_link_libraries(test_cases PUBLIC lib4neuro) @@ -46,3 +46,59 @@ set_target_properties( LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/examples" ) + +#in case the modular make does not compile library itself +target_include_directories( + test_cases + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + net_test_1 + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + net_test_2 + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + net_test_3 + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + net_test_ode_1 + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + net_test_pde_1 + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + network_serialization + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + test_harmonic_oscilator + PRIVATE + ${ROOT_DIR}/include +) + +target_include_directories( + seminar + PRIVATE + ${ROOT_DIR}/include +) +