对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。
感兴趣的朋友可以扫描下方的二维码或者搜索“里先森sements”来关注,欢迎来玩~!
本文介绍了如何使用可视化的 Anaconda Navigator 创建一个keras工作环境,并在其中安装keras与相关依赖,最后运行了一个keras官方的cnn代码来进行mnist数据的分类
目录
0 - 什么是Keras,为什么用Keras
这里引用Keras官方文档的一段:Keras: 基于 Python 的深度学习库
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 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 - 参考
- Keras入门(二)模型的保存、读取及加载_山阴少年-CSDN博客 https://blog.csdn.net/jclian91/article/details/83038861
- Keras自动下载的数据集/模型存放位置_Loy Fan-CSDN博客 https://blog.csdn.net/weixin_43318626/article/details/89945964