Skip to content

Instantly share code, notes, and snippets.

@HanatoK
Created October 24, 2020 09:45
Show Gist options
  • Save HanatoK/0390457acf199b2b5bc0c794f271d59f to your computer and use it in GitHub Desktop.
Save HanatoK/0390457acf199b2b5bc0c794f271d59f to your computer and use it in GitHub Desktop.
Test for ELU and ReLU with Lepton
#include <iostream>
#include <string>
#include "Lepton.h"
void testElu(const double x) {
const std::string expression{"elu(x, 2.0)"};
std::cout << "Test expression: " << expression << "\n";
Lepton::ParsedExpression parsed_expression;
parsed_expression = Lepton::Parser::parse(expression);
Lepton::CompiledExpression compiled_expression(parsed_expression.createCompiledExpression());
double& ref_x = compiled_expression.getVariableReference("x");
ref_x = x;
const double result = compiled_expression.evaluate();
std::cout << "x = " << x << "; " << expression << " = " << result << "\n";
std::cout << "Derivatives:\n";
Lepton::ParsedExpression grad_x_expression(parsed_expression.differentiate("x"));
Lepton::CompiledExpression grad_x_compiled_expression(grad_x_expression.createCompiledExpression());
double& ref_grad_x = grad_x_compiled_expression.getVariableReference("x");
ref_grad_x = ref_x;
const double result_grad_x = grad_x_compiled_expression.evaluate();
std::cout << "dx = " << result_grad_x << std::endl;
}
void testElu(const double x, const double alpha) {
const std::string expression{"elu(x, a)"};
std::cout << "Test expression: " << expression << "\n";
Lepton::ParsedExpression parsed_expression;
parsed_expression = Lepton::Parser::parse(expression);
Lepton::CompiledExpression compiled_expression(parsed_expression.createCompiledExpression());
double& ref_x = compiled_expression.getVariableReference("x");
double& ref_alpha = compiled_expression.getVariableReference("a");
ref_x = x;
ref_alpha = alpha;
const double result = compiled_expression.evaluate();
std::cout << "x = " << x << "; alpha = " << alpha << "; " << expression << " = " << result << "\n";
std::cout << "Derivatives:\n";
Lepton::ParsedExpression grad_x_expression(parsed_expression.differentiate("x"));
Lepton::CompiledExpression grad_x_compiled_expression(grad_x_expression.createCompiledExpression());
grad_x_compiled_expression.getVariableReference("x") = ref_x;
grad_x_compiled_expression.getVariableReference("a") = ref_alpha;
const double result_grad_x = grad_x_compiled_expression.evaluate();
std::cout << "dx = " << result_grad_x << std::endl;
Lepton::ParsedExpression grad_alpha_expression(parsed_expression.differentiate("a"));
Lepton::CompiledExpression grad_alpha_compiled_expression(grad_alpha_expression.createCompiledExpression());
grad_alpha_compiled_expression.getVariableReference("x") = ref_x;
// grad_alpha_compiled_expression.getVariableReference("a") = ref_alpha;
const double result_grad_alpha = grad_alpha_compiled_expression.evaluate();
std::cout << "dalpha = " << result_grad_alpha << std::endl;
}
void testRelu(const double x) {
const std::string expression{"relu(x)"};
std::cout << "Test expression: " << expression << "\n";
Lepton::ParsedExpression parsed_expression;
parsed_expression = Lepton::Parser::parse(expression);
Lepton::CompiledExpression compiled_expression(parsed_expression.createCompiledExpression());
double& ref_x = compiled_expression.getVariableReference("x");
ref_x = x;
const double result = compiled_expression.evaluate();
std::cout << "x = " << x << "; " << expression << " = " << result << "\n";
std::cout << "Derivatives:\n";
Lepton::ParsedExpression grad_x_expression(parsed_expression.differentiate("x"));
Lepton::CompiledExpression grad_x_compiled_expression(grad_x_expression.createCompiledExpression());
double& ref_grad_x = grad_x_compiled_expression.getVariableReference("x");
ref_grad_x = ref_x;
const double result_grad_x = grad_x_compiled_expression.evaluate();
std::cout << "dx = " << result_grad_x << std::endl;
}
int main() {
testElu(-0.5);
testElu(1.2);
testRelu(-1.2);
testRelu(1.3);
testElu(-0.5, 0.5);
testElu(2.5, 0.5);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment