我是靠谱客的博主 外向短靴,这篇文章主要介绍手搓‘神经网络’框架,现在分享给大家,希望可以做个参考。

大脑里有大概1000亿个神经细胞,这些神经细胞又叫做神经元(图片1)。它同样有一个细胞胞体,胞体里有个圆圆的细胞核。但特殊的是,神经元的胞体周围有很多树枝一样的分叉,叫做树突。还有一个很多分叉的尾巴,叫做轴突

现实世界中有很多信息,比如视觉,听觉,文字等等。人是怎么处理这些信息的呢?

其实就是靠大脑中的细胞,神经元,神经元有一个输入端,一个输出端,神经元会存储信息吗?

神经元位置是固定的。

看了几篇关于神经元的文章我们大概知道了神经元有哪些特点。

1.神经元有一个输入端(可以接收信号)还有一个输出端(可以发出信号)

2.神经元是信息载体(假如神经元可以存储少量信息)

3.神经元位置是固定的

知道这些我们便可以模拟一个神经元并创造一个小型神经网络。

本次使用QTC++编写的 因为qt信号和槽的方式很像神经元。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: int in; int out; QString data; Widget(QWidget *parent = nullptr); ~Widget(); void setText(QString data,int i); void setIndex(int i); QString getNews(); signals: void sendSignals(QString s,QList<int> &relation); public slots: void rectSignals(QString s,QList<int> &relation); private: Ui::Widget *ui; }; #endif // WIDGET_H

widget.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "widget.h" #include "ui_widget.h" #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::setText(QString data,int i) { ui->label_3->setText(data); this->data=data; } void Widget::setIndex(int i) { this->in=i; //this->out=i+1; } QString Widget::getNews() { return ui->label_3->text(); } void Widget::rectSignals(QString s,QList<int> &relation) { QString temp=s; if(s.length()>7){ data=s.mid(0,7); ui->label_3->setText(data); emit sendSignals(temp.remove(0,7),relation); relation.append(in); }else{ ui->label_3->setText(s); relation.append(in); } }

mainwindow.h

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <widget.h> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); QList<Widget *> widList; QList<int> relation; QList<int> &rel=relation; private slots: void on_pushButton_clicked(); signals: void startSig(QString s,QList<int> &relation); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

mainwindow.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); for(int i=0;i<10;i++){ Widget *w = new Widget(this); w->setIndex(i); widList.append(w); ui->GL->addWidget(w); } for(int i=0;i<9;i++){ connect(widList[i],SIGNAL(sendSignals(QString,QList<int>&)),widList[i+1],SLOT(rectSignals(QString,QList<int>&))); } connect(this,SIGNAL(startSig(QString,QList<int>&)),widList[0],SLOT(rectSignals(QString,QList<int>&))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { emit startSig(ui->lineEdit->text(),rel); QString news=""; for(int i=0;i<relation.length();i++){ news+=widList[relation.at(i)]->getNews(); } //qDebug()<<news; ui->lineEdit_2->setText(news); }

 输入:相当于你给程序说了一段话,然后他会给“神经元”发送消息,神经元收到消息以后会判断字符长度,如果大于7则吧剩下的字符串给下一个“神经元”。为什么是7,因为据说人的瞬时记忆只能记住7个字。而你输入的这段话都会已7个字符串为长度存储在神经元中,作为一段关系,比如上面输入的七绝诗4句分别对应0,1,2,3,这四个神经元会建立关系,然后返回到输出框。

以完成一次训练。

比如一个婴儿在初次看到电视时他并不知道电视是什么,大脑依然存储了这次消息,下一次在看到电视,脑子中便有了电视的记忆,然而这次看到电视里在播放动画片,大脑检索不到信息,再次存储电视可以看动画片。

其实人脑就像一个大型关系数据库,你看到一个东西的时候便会在大脑中检索信息。然后返回与之相关的信息。

最后

以上就是外向短靴最近收集整理的关于手搓‘神经网络’框架的全部内容,更多相关手搓‘神经网络’框架内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部