深度学习的作业,但是小白不是很理解,作业内容应该是需要机器自动调整training里的参数来提高准确率,但是这个应该怎么写呢?是需要用某个算法还是全部自己敲出来呢?
training寒素和main函数是这样的:
static void training()
{
int no_of_hiddens = 5*5;
int hidden_layers=3;
int no_of_outputs=1;
int itt,i,index;
unsigned int random_seed = 123;
char filename[256];
char title[256];
char weights_filename[256];
int weights_image_width = 480;
int weights_image_height = 800;
float error_threshold_percent[] = { 1.6f, 0.8f, 0.8f, 11.0f };
float v;
const int logging_interval = 40000;
current_data_set = data_set;
sprintf(weights_filename,"%s","weights.png");
sprintf(title, "%s", TITLE);
/* create the learner */
deeplearn_init(&learner,
no_of_inputs, no_of_hiddens,
hidden_layers,
no_of_outputs,
error_threshold_percent,
&random_seed);
/* set learning rate */
deeplearn_set_learning_rate(&learner, 0.2f);
/* set percentage of dropouts */
deeplearn_set_dropouts(&learner, 0.001f);
/* perform pre-training with an autocoder */
itt = 0;
while (learner.current_hidden_layer < hidden_layers) {
/* index of the example to be used */
index = rand_num(&random_seed)%no_of_examples;
/* load the data set inputs into the network inputs */
for (i = 0; i < fields_per_example-1; i++) {
v = current_data_set[index*fields_per_example + i];
v = data_to_neuron_value(i, v);
deeplearn_set_input(&learner, i, v);
}
/* update the learner */
deeplearn_update(&learner);
itt++;
if ((itt % logging_interval == 0) && (itt>0)) {
printf("%d: %.5f%%\n",
learner.current_hidden_layer, learner.BPerror);
/* save a graph */
sprintf(filename,"%s","training_error.png");
deeplearn_plot_history(&learner,
filename, title,
1024, 480);
/* plot the weights */
if ((&learner)->autocoder != 0) {
bp_plot_weights((&learner)->autocoder,
weights_filename,
weights_image_width,
weights_image_height,
0);
}
}
}
/* save a graph */
sprintf(filename,"%s","training_error.png");
deeplearn_plot_history(&learner,
filename, title,
1024, 480);
/* plot the weights */
bp_plot_weights((&learner)->net,
weights_filename,
weights_image_width,
weights_image_height,
0);
/* perform the final training between the last
hidden layer and the outputs */
while (learner.training_complete == 0) {
/* index of the example to be used */
index = rand_num(&random_seed)%no_of_examples;
/* load the data set inputs into the network inputs */
for (i = 0; i < fields_per_example-1; i++) {
v = current_data_set[index*fields_per_example + i];
v = data_to_neuron_value(i, v);
deeplearn_set_input(&learner, i, v);
}
/* set the desired outputs */
v = current_data_set[index*fields_per_example + fields_per_example - 1];
v = data_to_neuron_value(fields_per_example - 1, v);
deeplearn_set_output(&learner, 0, v);
/* update the learner */
deeplearn_update(&learner);
itt++;
if ((itt % logging_interval == 0) && (itt>0)) {
printf("Final: %.5f %.2f%%/%.2f%%\n", learner.BPerror,
get_performance(&learner,
data_set,no_of_examples),
get_performance(&learner,
test_data,no_of_test_examples));
/* save a graph */
sprintf(filename,"%s","training_error.png");
deeplearn_plot_history(&learner,
filename, title,
1024, 480);
/* plot the weights */
if ((&learner)->autocoder!=0) {
bp_plot_weights((&learner)->autocoder,
weights_filename,
weights_image_width,
weights_image_height,
0);
}
}
}
/* save a graph */
sprintf(filename,"%s","training_error.png");
deeplearn_plot_history(&learner,
filename, title,
1024, 480);
/* plot the weights */
bp_plot_weights((&learner)->net,
weights_filename,
weights_image_width,
weights_image_height,
0);
printf("Training performance: %.4f%%\nTest Performance: %.4f%%\n",
get_performance(&learner,data_set,no_of_examples),
get_performance(&learner,test_data,no_of_test_examples));
}
/**
* @brief Main function
*/
int main(int argc, char* argv[])
{
/* load the data */
printf("Loading data set\n");
no_of_examples =
load_data(DATA_FILE,
data_set, MAX_EXAMPLES,
&fields_per_example);
/* create a test data set */
printf("Creating test data set\n");
no_of_test_examples =
create_test_data(data_set,
&no_of_examples,
fields_per_example,
test_data);
no_of_inputs = fields_per_example-1;
printf("Number of training examples: %d\n",no_of_examples);
printf("Number of test examples: %d\n",no_of_test_examples);
printf("Number of fields: %d\n",fields_per_example);
training();
return 1;
}
运行之后的结果是这样子的:
实在是不太理解要怎么实现深度学习,看了很多博客大部分都是在讲原理,没有说要怎么写的(哭,希望有大佬帮帮!谢谢大家!!!