概述
大脑里有大概1000亿个神经细胞,这些神经细胞又叫做神经元(图片1)。它同样有一个细胞胞体,胞体里有个圆圆的细胞核。但特殊的是,神经元的胞体周围有很多树枝一样的分叉,叫做树突。还有一个很多分叉的尾巴,叫做轴突
现实世界中有很多信息,比如视觉,听觉,文字等等。人是怎么处理这些信息的呢?
其实就是靠大脑中的细胞,神经元,神经元有一个输入端,一个输出端,神经元会存储信息吗?
神经元位置是固定的。
看了几篇关于神经元的文章我们大概知道了神经元有哪些特点。
1.神经元有一个输入端(可以接收信号)还有一个输出端(可以发出信号)
2.神经元是信息载体(假如神经元可以存储少量信息)
3.神经元位置是固定的
知道这些我们便可以模拟一个神经元并创造一个小型神经网络。
本次使用QTC++编写的 因为qt信号和槽的方式很像神经元。
#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
#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
#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
#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,这四个神经元会建立关系,然后返回到输出框。
以完成一次训练。
比如一个婴儿在初次看到电视时他并不知道电视是什么,大脑依然存储了这次消息,下一次在看到电视,脑子中便有了电视的记忆,然而这次看到电视里在播放动画片,大脑检索不到信息,再次存储电视可以看动画片。
其实人脑就像一个大型关系数据库,你看到一个东西的时候便会在大脑中检索信息。然后返回与之相关的信息。
最后
以上就是外向短靴为你收集整理的手搓‘神经网络’框架的全部内容,希望文章能够帮你解决手搓‘神经网络’框架所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复