从零开始开发自己的类keras深度学习框架

认真学习,佛系更博。

最近抽空开发了一个基于numpy的简易版的神经网络框架,类似于keras的调用方法,该框架不强烈追求网络学习的效率,旨在更好地理解神经网络模型的原理;特此记录,也期待和别人分享;

我们想实现的终极目标是:使用自己开发的框架可以方便的搭建、训练、预测数据的类别,如下面代码:

if __name__ == '__main__':

    data_handler = ImageHandler("dataset", gray=True, flatten=False, use_scale=True)
    train_data, train_label, test_data, test_label = data_handler.get_data(ratio=0.2)

    model = Sequential()

    model.add(Conv2D(filters=32, optimizer="adam", strides=1, kernel_size=(2, 2), name="conv1",
                     padding="valid", input_shape=(28, 28, 1)))
    model.add(BatchNormalization())
    model.add(Relu())
    model.add(MaxPool2D(size=2))

    model.add(Conv2D(filters=64, optimizer="adam", padding="valid", name="conv2", strides=1))
    model.add(BatchNormalization())
    model.add(Relu())
    model.add(MaxPool2D(size=2))

    model.add(Flatten())
    model.add(Dense(kernel_size=64, optimizer="adam"))
    model.add(BatchNormalization())
    model.add(Sigmoid())
    model.add(Dense(kernel_size=10, activation="sigmoid", optimizer="adam"))

    model.compile(loss="cross_entropy", lr=0.01)
    model.summary()

    model.fit(train_data, train_label, epoch=20)

其调用方式类似于keras,可以很方便地叠加各个层,使用compile编译模型(初始化),summary输出网络结构,fit训练模型。

为了实现该功能,我们将代码主要分为4个模块:

  1. 数据处理模块,见上诉代码的ImageHandler;
  2. 网络层模块,该模块实现各种神经网络结构,如全连接层、卷积层、dropout层、batch_normalization、flatten层等;
  3. 模型模块,为了简化系统,我们只实现了keras的管道模型,但这不影响我们理解神经网络的原理,见上述Sequential;
  4. 其他,包括误差计算模块、优化器模块等;我们将实现2种误差计算方法(mse、cross_entropy),5种优化器(sgd、momentum、adagrad、rmsprop、adam)

整个代码放在github上:https://github.com/darkwhale/neural_network ;

下一章将从模块1开始,一步一步实现我们自己的神经网络框架。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值