Keras的使用方法
来源:互联网 发布:金汇宝软件 编辑:程序博客网 时间:2024/06/11 23:17
Keras的使用方法
一种high-level的python API。
- Keras的使用方法
- Install
- Fundamentals of Keras
- Keras Sequential Model
- Sequence Model解决一个数值回归问题
- 保存网络和加载
cv-tricks教程篇
Keras 可以作为tensorflow和Theano的前端接口。
The power of being able to run the same code with different back-end is a great reason for choosing Keras.
Install
sudo pip install h5py #Used for save the networksudo pip install numpy scipy pillowsudo pip install keras
装好后,可以到配置文件~/.keras/keras.json里指定后台运行在Tensorflow还是Theano上。
{ "epsilon": 1e-07, "floatx": "float32", "image_data_format": "channels_last", "backend": "tensorflow"}
Tensorflow要用channels_last, 而Theano要用channels_first, 因为:
Note that, the value of image_data_format is “channels_last”, which is the correct value for Tensorflow. In Tensorflow, images are stored as Tensors/arrays of shape [height, width, channels] while in Theano the order is different [channels, height, width]. So, if you don’t have this parameter set correctly, your intermediate results will be very strange. For Theano, this value will be “channels_first”.
Fundamentals of Keras
两种方式可以创建模型:
1. Sequential models: 创建简单模型
2. Functional API: 创建复杂模型
Keras Sequential Model
使用这一种方法创建模型,首先需要创建一个顺序模型:
from keras.models import Sequentialmodel = Sequential()
定义网络结构的相关方法:Dense(fully connected layer),Activation,Conv2D,MaxPooling2D,Flatten,Dropout
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropoutmodel.add(Conv2D(64, (3, 3), activation='relu'))#This adds a Convolutional layer with 64 filters of size 3 * 3 to the graphmodel.add(MaxPooling2D(pool_size=(2, 2)))#MaxPooling layer: Specify the type of layer and specify the pool size and you are done.model.add(Dense(256, activation='relu'))#Fully connected layer: It’s called Dense in Keras. Just specify the number of outputs and you are done.model.add(Dropout(0.5))model.add(Flatten())
网络的第一层需要读入数据,因此第一层网络需要额外指明数据的shape:
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))# Here the shape is 224 * 224 * 3.
网络的损失函数和优化方式。使用model.compile()函数。
For example, in this line below we are asking the network to use the ‘rmsprop’ optimizer to change weights in such a way that the loss ‘binary_crossentropy’ is minimized at each iteration.
model.compile(loss='binary_crossentropy', optimizer='rmsprop')
If you want to specify stochastic gradient descent and you want to choose proper initialization and other hyperparameters:
from keras.optimizers import SGD.............sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss='categorical_crossentropy', optimizer=sgd)
使用fit函数数据输入。
model.fit(x_train, y_train, batch_size=32, epochs=10,validation_data=(x_val, y_val))# epochs: maximum numbers of epochs you want training to go on.
最后是使用evaluate函数进行模型测试。
score = model.evaluate(x_test, y_test, batch_size=32)
Sequence Model解决一个数值回归问题
import kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy as nptrX = np.linspace(-1, 1, 101)trY = 3 * trX + np.random.randn(*trX.shape) * 0.33model = Sequential()#model.add(Dense(input_dim=1, output_dim=1, init='uniform', activation='linear'))model.add(Dense(input_dim=1, units=1, kernel_initializer='uniform', activation='linear'))model.compile(optimizer='sgd', loss='mse')weights = model.layers[0].get_weights()w_init = weights[0][0][0]b_init = weights[1][0]print('Linear regression model is initialized with weight w: %.2f, b: %.2f' % (w_init, b_init))# Linear regression model is initialized with weight w: -0.04, b: 0.00model.fit(trX, trY, epochs=200, verbose=1)weights = model.layers[0].get_weights()w_final = weights[0][0][0]b_final = weights[1][0]print('Linear regression model is trained to have final weight w: %.2f, b: %.2f' % (w_final, b_final))# Linear regression model is trained to have final weight w: 2.98, b: 0.09
如果不使用Keras的话,tensorflow的代码应该这样写:
import tensorflow as tfimport numpy as nptrainX = np.linspace(-1, 1, 101)trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33X = tf.placeholder("float")Y = tf.placeholder("float")w = tf.Variable(0.0, name="weights")init = tf.global_variables_initializer()print( "Your Tensorflow version is "+ str(tf.__version__) +".") print("If you Tensorflow version is < 0.11, you will face error in tf.multiply function. Check code comment" )y_model = tf.multiply(X, w)# This was tf.mul for older versions cost = (tf.pow(Y-y_model, 2))train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)with tf.Session() as sess: sess.run(init) for i in range(100): for (x, y) in zip(trainX, trainY): sess.run(train_op, feed_dict={X: x, Y: y}) print(sess.run(w))
简单对比一下可以发现:创建placeholder, session和变量及其初始化上面都可以省略,确实方便了一些。如果是创建卷积神经网络,则会方便更多。
保存网络和加载
这里使用的数据形式是HDF5 Binary format。保存方法:
model.save_weights("my_model.h5")
加载方法:
model.load_weights('my_model_weights.h5')
- Keras的使用方法
- keras的使用流程
- keras的模型可视化
- keras 的使用
- Keras的基本介绍
- keras的Embedding层
- keras的零碎笔记
- seq2seq 的 keras 实现
- keras的运行机制
- keras的使用
- Keras的入门
- keras的lenet实现
- GAN 的 keras 实现
- GAN 的 keras 实现
- keras下的tensorboard
- 修改keras的backend
- keras 的可视化
- keras 的LearningRateScheduler
- qt获取combox内容的知识点
- 用有名管道实现文件复制,有两个终端 ,一个进行复制操作,另一个进行粘贴操作
- 17.9.15leetcode刷题(595)
- css中大div中的块级元素转为内联块产生的问题
- 数据结构——线性表——散列存储结构——哈希表知识点总结 原创 2017年05月14日 10:08:40 散列(hashing)是一种重要的存储方法,也是一种常见的查找方法。 基本思想:以结点的
- Keras的使用方法
- 跨域请求不被允许
- 安卓今日头条的框架的搭建
- POJ 1556 错误代码
- Codeforces 854A Fraction
- springboot-druid-mybatis多数据源使用
- 使用PullToRefresh实现下拉刷新和上拉加载
- 2017远景能源Java面试
- postman 简单教程-实现简单的接口测试