Keras 基础学习 I Sequential Model

keras介绍

keras是一个深度学习的高级API接口,有python实现,支持tensorflow,theano作为后端,最近keras也成为tensorflow的官方高级API,因此和tensorflow的适配性更好了。keras支持简介的快速的原型设计,支持CNN和RNN,无缝CPU和GPU切换。此外keras模型也能直接转为coreML模型应用在iOS设备上

如果你熟悉深度学习基本概念,keras很容易上手进行快速复现,因此不需要自己实现很多layer,门槛很低。

Sequential Model

序列模型是多个网络层的线性叠加,可以传入layer list或者调用add()方法将layer加入模型

from keras.models import Sequential
from keras.layers import Dense,Activation
# add方法
model = Sequential()
model.add(Dense(32,input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation("softmax"))

定义好模型之后,需要调用compile方法对模型进行配置,此时传入三个参数:optimizer,loss,metrics,loss和metrics都可以自定义

# for a multi-class classification problem
model.compile(optimizer='rmsprop',
             loss = 'categorical_crossentropy',
              metrics=['accuracy']
             )
# For a binary classification problem
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# For a mean squared error regression problem
model.compile(optimizer='rmsprop',
              loss='mse')


#for custom metrics
import keras.backend as K

def mean_pred(y_true,y_pred):
    return K.mean(y_pred)


model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])

定义好模型和配置之后就可以使用Fit()和fit_generator()方法传入进行训练

model.fit(x_train,y_train,epochs=20,batch_size=128)

训练完之后就可以调用evaluate()方法对训练好的模型进行评估

score = model.evaluate(x_test,y_test,batch_size=128)

下面通过一个手写字符分类来看下keras如何建模

from keras.layers import Dense,Dropout
from keras import models
from keras.datasets import mnist
from keras.utils import to_categorical # convert int labels to one-hot vector
#define model
model = models.Sequential()
model.add(Dense(128,activation="relu",input_dim=784))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
# print model
model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_79 (Dense)             (None, 128)               100480    
_________________________________________________________________
dropout_21 (Dropout)         (None, 128)               0         
_________________________________________________________________
dense_80 (Dense)             (None, 64)                8256      
_________________________________________________________________
dropout_22 (Dropout)         (None, 64)                0         
_________________________________________________________________
dense_81 (Dense)             (None, 10)                650       
=================================================================
Total params: 109,386
Trainable params: 109,386
Non-trainable params: 0
_________________________________________________________________
# load data
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.astype('float32')/255 # normalize to 0~1
test_images = test_images.astype('float32')/255
train_images = train_images.reshape((60000,-1))
test_images = test_images.reshape((10000,-1))
# convert to one-hot vectors
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
# define training config
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

#train the model
model.fit(train_images,train_labels,epochs=5,batch_size=64)


#评估模型
test_loss,test_accuracy = model.evaluate(test_images,test_labels)

print("test loss:",test_loss)
print("test acc:",test_accuracy)
Epoch 1/5
60000/60000 [==============================] - 7s 113us/step - loss: 0.6265 - acc: 0.8106
Epoch 2/5
60000/60000 [==============================] - 5s 83us/step - loss: 0.3415 - acc: 0.9079
Epoch 3/5
60000/60000 [==============================] - 5s 82us/step - loss: 0.2935 - acc: 0.9228
Epoch 4/5
60000/60000 [==============================] - 5s 82us/step - loss: 0.2749 - acc: 0.9312
Epoch 5/5
60000/60000 [==============================] - 5s 84us/step - loss: 0.2656 - acc: 0.9356
10000/10000 [==============================] - 1s 128us/step
test loss: 0.1488323472943157
test acc: 0.9647

CNN

from keras.datasets import mnist
from keras.utils import np_utils #convert int labels to one-hot vector
from keras.layers import Dense,Conv2D,MaxPool2D
from keras.models import Sequential

# define model
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))


#print model
# model.summary()

#load data
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255  # normalize to 0~1

test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255

# convert to one-hot vectors
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

# define training config
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

# train the model
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# evaluate the model
test_loss, test_accuracy = model.evaluate(test_images, test_labels)
print("test loss:", test_loss)
print("test accuracy:", test_accuracy)
Epoch 1/5
60000/60000 [==============================] - 17s 276us/step - loss: 0.1867 - acc: 0.9410
Epoch 2/5
38592/60000 [==================>...........] - ETA: 3s - loss: 0.0514 - acc: 0.9841
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值