Keras #0 搭建Keras环境,跑一个例程

 对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。
感兴趣的朋友可以扫描下方的二维码或者搜索“里先森sements”来关注,欢迎来玩~!


本文介绍了如何使用可视化的 Anaconda Navigator 创建一个keras工作环境,并在其中安装keras与相关依赖,最后运行了一个keras官方的cnn代码来进行mnist数据的分类

目录

0 - 什么是Keras,为什么用Keras

1 - 准备与部署

2 - 使用pycharm创建一个工程

3 - mnist数据库

4 - 代码运行

5 - 模型的保存

X - 参考


0 - 什么是Keras,为什么用Keras

这里引用Keras官方文档的一段:Keras: 基于 Python 的深度学习库

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlowCNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你在以下情况下需要深度学习库,请使用 Keras:

  • 允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
  • 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  • 在 CPU 和 GPU 上无缝运行。

简而言之,Keras是一个于Tensorflow、Caffe的深度学习框架\库。使用这类框架,你可以将你设计的神经网络结构,通过调用框架的函数API方便的将其进行实现,通过给定相关的参数(超参数)等,让框架来自动的帮你进行模型的学习。

Keras并不是一种独立的框架,它更像是一个外壳。对用户,它提供了相比其他框架更加直观和方便操作使用的API,对内,其后端调用其他更强大的框架,来完成模型的训练。目前Keras支持三种后端,TensorFlow、Theano以及CNTK。

由于Keras的设计将一些复杂晦涩的高端框架的接口进行包装,使得它对于人类来说更加友好(谁不喜欢一个方便好使的锤子呢?)。你可以通过Keras的官方文档上的30s快速上手部分来直观的体验一下Keras在部署网络与训练、验证上的方便与快捷:快速开始:30 秒上手 Keras

1 - 准备与部署

Keras使用Python进行编写,目前支持的Python版本范围为 Python 2.7 ~ 3.6 。这里我们使用Anaconda进行我们Python环境的配置,以及Keras与后端的安装。

关于anaconda、python、pycharm之间的关系,你可以点击查看之前的文章。

打开Anaconda Navigator,我们新建一个环境,这里命名为“Keras”

选中新建的环境,在右侧的列表中,下拉框选中All,分别搜索Keras与Tensorflow,选中包,apply,anaconda会自动的查找包所需的依赖,在列表中显示你总共需要安装的包

点击apply,等待安装完成。如果觉得下载速度太慢,可以先架设好梯子再下载。

如果想要keras能调用gpu来进行训练加速,这里建议在不同与cpu版的keras的python环境中进行安装。

使用 Anaconda Navigator,切换到新建的环境中

搜索 “keras”,勾选 “keras” 与 “keras-gpu”,应用,便会自动寻找相应的依赖,进行安装

这里值得注意的是,若你该环境中之前安装了高版本的tensorflow与tensorflow-gpu,在勾选keras-gpu后,依赖会要求将你的2.0版本的tensorflow降级到1.15版本。如果不降级,会出现新、旧函数调用的问题。

no-attribute-get-default-graph

File "neuralnetwork.py", line 38, in <module> model = Sequential()
File "/usr/local/lib/python2.7/dist-packages/keras/engine/sequential.py", line 87, in __init__
super(Sequential, self).__init__(name=name)
File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 96, in __init__
self._init_subclassed_network(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 294, in _init_subclassed_network
self._base_init(name=name)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 109, in _base_init
name = prefix + '_' + str(K.get_uid(prefix))
File "/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py", line 74, in get_uid
graph = tf.get_default_graph()
AttributeError: 'module' object has no attribute 'get_default_graph'

而我在 stackoverflow 的这个解答中看到的方法,并不能解决这个问题。

因为主要是当前使用anaconda安装keras的版本中,该部分的代码没有进行修改,因此从tensorflow中载入keras也于事无补。

如果想要避免这个问题,想要使用新版本的话只能够按照官方要求,卸载所有相关包,手动使用pip安装keras,手动安装tensorflow。如果图方便,就按照上面的安装方式,勾选上”keras“与”keras-gpu",让依赖自动去降级tensorflow

2 - 使用pycharm创建一个工程

在环境搭建好后,我们就可以使用pycharm在当前环境进行Keras的代码编写了。

打开pycharm,新建工程,选择我们含有keras的环境

接着,我们使用Keras官方的一个mnist-cnn代码测试一下。代码的原地址为:https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

这里我们代码稍作改动,加入了模型可视化的代码,需要安装 matpllotlib 与 pydot ,在anaconda navigator中查找安装即可。

'''Trains a simple convnet on the MNIST dataset.
Gets to 99.25% test accuracy after 12 epochs
(there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
'''

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

from keras.utils import plot_model

import matplotlib.pyplot as plt

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

# 输出训练好的网络模型
plot_model(model,to_file='model-cnn.png')

# 训练历史可视化
# 绘制训练 & 验证的准确率值
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()

# 绘制训练 & 验证的损失值
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()

3 - mnist数据库

这里代码里使用了mnist数据库,这是一个手写数字的数据库,官网是:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges  

代码在执行到

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

时,会查找本机上是否有MNIST数据库,如果没有,它会自动下载。如果不架设梯子的话,下载速度过慢。可以手动下载mnist数据库,然后放置到对应的位置。在不同操作系统上,对应的位置可以参考博客:Keras自动下载的数据集/模型存放位置

在Windows平台,会到我们用户名下的 .keras\datasets中查找是否有 mnist.npz 数据文件。

Keras的数据可视化部分可以参考官方文档:可视化 Visualization

4 - 代码运行

由于使用的非gpu版本的keras,学习比较费时间,最后代码输出结果如下:

5 - 模型的保存

加入下面的代码就可以完成训练完毕的模型的保存

# save model
    print("Saving model to disk \n")
    mp = "model.h5"
    model.save(mp)

保存完毕后的模型文件可以在日后需要使用时重新加载,可以参考 Keras入门(二)模型的保存、读取及加载_山阴少年-CSDN博客  的读取部分。

模型文件被存储为了HDF5格式,若想直观的查看需要使用专门的软件,可以使用 HDFView 或者别的小工具,比如Github上的PyHDFView

X - 参考

  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值