Keras学习1:实现简单的前馈神经网络和卷积神经网络

首先贴上莫烦老师的课程连接和Keras官方中文文档,有TF基础的同学很快就能上手:莫烦-Keras and Keras中文文档

Why Keras?

如果说 Tensorflow 或者 Theano 神经网络方面的巨人. 那 Keras 就是站在巨人肩膀上的人. Keras 是一个兼容 Theano 和 Tensorflow 的神经网络高级包, 用他来组件一个神经网络更加快速, 几条语句就搞定了. 而且广泛的兼容性能使 Keras 在 Windows 和 MacOS 或者 Linux 上运行无阻碍.

学习过TensorFlow的同学应该都有一个深刻体会,就是这个东西实在是太底层了!底层到甚至网络的参数量、参数的tensor形状都需要自己亲手去定义。相比于TF,Keras是更加高层和抽象的深度学习API,可以理解为一个封装好的函数库,能够大大简化神经网络的搭建和训练过程。

话不多说,下面直接贴代码

Keras实现简单的回归任务
使用Keras实现回归任务:y=0.5*x+2
网络搭建使用Sequential()方法,训练使用model.train_on_batch

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

# create some data
x = np.linspace(-1, 1, 200)
np.random.shuffle(x)
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (200, ))
x_train, y_train = x[: 160], y[: 160]
x_val, y_val = x[160:], y[160:]

# build model
model = Sequential()
model.add(Dense(units=1, input_dim=1))

# define loss and optimizer
model.compile(loss='mse', optimizer='sgd')

# train
for step in range(300):
    cost = model.train_on_batch(x_train, y_train)
    if step % 10 == 0:
        print('train cost:{}'.format(cost))

# evaluate
cost = model.evaluate(x_val, y_val, batch_size=40)
print('val cost:{}'.format(cost))

w, b = model.layers[0].get_weights()
print("w={} b={}".format(w, b))

Keras实现前馈神经网络
使用前馈神经网络进行MNIST数据库分类任务
训练使用model.fit

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import RMSprop
from keras.losses import categorical_crossentropy
from keras.utils import np_utils

# prepare data
(x_train, y_train), (x_val, y_val) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], -1)/255
x_val = x_val.reshape(x_val.shape[0], -1)/255
y_train = np_utils.to_categorical(y_train, 10)
y_val = np_utils.to_categorical(y_val, 10)

# build network
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))

# define optimizer and loss
rmsprop = RMSprop(lr=0.001)
model.compile(optimizer=rmsprop, loss='categorical_crossentropy', metrics=['accuracy'])

# train
model.fit(x_train, y_train, batch_size=32, epochs=10)

# test
loss, accuracy = model.evaluate(x_val, y_val, batch_size=32)
print(loss)
print(accuracy)

Keras实现简单的卷积神经网络
使用卷积神经网络实现MNIST数据库分类任务
网络搭建使用Model()方式

from keras.datasets import mnist
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Activation, Input, Flatten
from keras.optimizers import RMSprop
from keras.models import Model
from keras.utils.np_utils import to_categorical

# prepare data
(x_train, y_train), (x_val, y_val) = mnist.load_data()
x_train = x_train.reshape([-1, 28, 28, 1])
y_train = to_categorical(y_train, num_classes=10)
x_val = x_val.reshape([-1, 28, 28, 1])
y_val = to_categorical(y_val, num_classes=10)

# build cnn
inputs = Input(shape=[28, 28, 1])
conv1 = Conv2D(filters=6, kernel_size=5, strides=1, padding='same', activation='relu')(inputs)
pool1 = MaxPooling2D(pool_size=2, strides=2, padding='same')(conv1)
conv2 = Conv2D(filters=16, kernel_size=5, strides=1, padding='same', activation='relu')(pool1)
pool2 = MaxPooling2D(pool_size=2, strides=2, padding='same')(conv2)
fla = Flatten()(pool2)
fc3 = Dense(128, activation='relu')(fla)
pred = Dense(10, activation='softmax')(fc3)
# 与Sequential方式不同!
model = Model(inputs=inputs, outputs=pred)

# complie model
rmsprop = RMSprop(lr=0.001)
model.compile(optimizer=rmsprop, loss='categorical_crossentropy', metrics=['accuracy'])

# train
model.fit(x_train, y_train, batch_size=32, epochs=2)
# evaluate
loss, accu = model.evaluate(x_val, y_val, batch_size=32)
print(loss)
print(accu)

model.evaluate与model.predict

学习中,遇到model.evaluate与model.predict两个函数,其区别如下:

model.evaluate:给定输入,计算model.complie中指定metric,并根据y_true和y_pred返回计算的度量值。简单来说,该函数用于计算损失或准确率等模型度量值,用于模型评估,因此叫做evaluate
model.predict:根据输入,返回输出值,即返回y_pred,经常用于取出某一层输出
此外还有一个函数model.predict_classes,用于返回预测类别,可直接给出类别标号

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值