计算机视觉学习——神经网络和keras一些常见的api

一、人工神经网络

人工神经网络(Artificial Neural Network)是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。经典的神经网络结构包含三个层次的神经网络:分别输入层,输出层以及隐藏层。

基本的神经网络模型.png

其中输入层是我们模型的特征,经过中间层的变化,得到最后的输入层,通过输出层内容,方便我们对问题进行决策。
隐藏层的每一个节点都是一个感知机,所谓感知机是一种最基础的分类模型,前半部分类似于回归模型。感知机最基础是这样的函数,而逻辑回归用的sigmoid。这个感知机具有连接的权重和偏置
一个感知机模型.png

ps:http://playground.tensorflow.org,这个网址将神经网络可视化,方便学习。

二、神经网络计算原理

人工神经网络网络的计算思路很简单,就是首先随机定义一组参数w,计算参数w和特征x的乘积,对计算的结果再加一个偏执b就行了,最后将计算到的结果进行一次归一化处理,归一化的目的就是将结果变成0-1之间,符合概率的要求。有很多的感知机的话就需要很多组参数w和偏置b。

神经网络计算原理.png

ps:softmax就是一种归一化的函数, 其计算过程:softmax(y)i=e^yi /(ey1+ey2.......+e^yn)
以上只是我们一次正向传播的过程,这次的参数是我们随机初始化的,这一次计算的结果必然和我们真实值是没什么关系的,那么我们就需要计算预测值与真实值之间的误差然后进行反向传播,softmax作为激活函数的话,我们一般就使用交叉熵损失:
H(y) = -[y1log(Y1)+y2log(Y2)......+ynlog(Yn)],其中y表示真实值,Y表示预测值

ps:神经网络最后的损失为平均每个样本的损失大小。对所有样本的损失求和取其平均值
计算出损失之后,就可以使用梯度下降算法来对参数进行更新
反复更新多次之后,模型的参数就越来越准确了。

三、使用keras的api手动实现一个神经网络

Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产,具有以下优势:

  • 方便用户使用,快速构建模型 Keras 具有针对常见用例做出优化的简单而一致的界面。
  • 它可针对用户错误提供切实可行的清晰反馈。模块化和可组将可配置的构造块连接在一起就可以构建 Keras 模型,并且几乎不受限制。
    Keras为我们提供了几个现有的数据集:
  • mnist:手写数字
  • fashion_mnist:时尚分类
  • cifar10(100):10个类别分类
    我们使用fashion_mnist来实现一个分类的案例
    定义一个自定义的类,并加载keras提供的数据集
class SingleNN(object):
    """使用keras的相关参数构造一个人工神经网络,实现对fashion_mnist数据集进行分类"""
    def __init__(self):
        (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
        self.model = keras.models.Sequential([
            keras.layers.Flatten(input_shape=(28, 28)),
            keras.layers.Dense(128, activation='relu'),
            keras.layers.Dense(10, activation='softmax'),
        ])

设置好模型的参数:

    def compile(self):
        self.model.compile(optimizer=keras.optimizers.Adam(),
                           loss=losses.sparse_categorical_crossentropy,
                           metrics=['accuracy'])
        return None

开始训练模型

    def fit(self):
        self.model.fit(x=self.x_train, y=self.y_train, epochs=5)
        return None

保存模型

    def save_model(self):
        self.model.save_weights('./ckpt/SingleNN')

预测:

    def predict(self):
        if os.path.exists('./ckpt/SingleNN'):
            self.model.load_weights('./ckpt/SingleNN')
        predictions = self.model.predict(self.x_train)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容