大脑里有大概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,这四个神经元会建立关系,然后返回到输出框。
以完成一次训练。
比如一个婴儿在初次看到电视时他并不知道电视是什么,大脑依然存储了这次消息,下一次在看到电视,脑子中便有了电视的记忆,然而这次看到电视里在播放动画片,大脑检索不到信息,再次存储电视可以看动画片。
其实人脑就像一个大型关系数据库,你看到一个东西的时候便会在大脑中检索信息。然后返回与之相关的信息。
最后
以上就是外向短靴最近收集整理的关于手搓‘神经网络’框架的全部内容,更多相关手搓‘神经网络’框架内容请搜索靠谱客的其他文章。
发表评论 取消回复