-
我是用opencv (c++插件)来加载图片,然后用来进行机器学习
-
安装opencv (c++插件)请进链接:
https://blog.youkuaiyun.com/smilife_/article/details/89244189 -
全连接神经网络框架图:


-
然后话不多说,附上源码
#include <vector>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#include <opencv.hpp>
using namespace cv;
using namespace std;
class Linear {
//定义全连接神经网络类
public:
vector<vector<double> > w1, w2, b1, b2, x, y, y_pred, A1, A2, h_relu;
double loss;
Linear(int inchanels,int outchanels,int batch_size ) {
//初始化参数
srand((unsigned)time(NULL));
int mid_layer = 100;
vector<vector<double> > w1(mid_layer, vector<double>(inchanels));
for (int i = 0; i < w1.size(); i++) {
for (int j = 0; j < w1[0].size(); j++) {
w1[i][j] = double(rand() % 1000) / 1000/10;
}
}
this->w1 = w1;
vector<vector<double> >b1(mid_layer, vector<double>(batch_size));
this->b1 = b1;
vector<vector<double> >w2(outchanels, vector<double>(mid_layer));
for (int i = 0; i < w2.size(); i++) {
for (int j = 0; j < w2[0].size(); j++) {
w2[i][j] = double(rand() % 1000) / 1000*0.01;
}
}
this->w2 = w2;
vector<vector<double> >b2(outchanels, vector<double>(batch_size));
this->b2 = b2;
}
vector<vector<double> > dot(vector<vector<double> > v1, vector<vector<double> > v2) {
vector<vector<double> > v3(v1.size(), vector<double>(v2[0].size()));
double s = 0.00000; //实现矩阵相乘
for (int h = 0; h < v2[0].size(); h++) {
for (int k = 0; k < v1.size(); k++) {
for (int j = 0; j < v2.size(); j++) {
s += v1[k][j] * v2[j][h];
}
v3[k][h] = s;
s = 0.00000;
}
}
return v3;
}
vector<vector<double> >Relu(vector<vector<double> > v) {
//实现Relu激活函数
vector<vector<double> > v3(v.size(), vector<double>(v[0].size()));
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j <

最低0.47元/天 解锁文章
3438





