Keras入门

keras是一个用Python编写的高级神经网络API,它能够以Tensorflow,CNTK或者Theano作为后端运行。

Keras的开发重点在于支持快速的实验。能够以较小的时延把你的想法转换为实验结果,是做好研究的关键。

Keras特点

  • Keras 是为人类而非机器设计的 APIKeras 遵循减少认知困难的最佳实践: 它提供一致且简单的 API,它将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。

  • 这使 Keras 易于学习和使用。作为 Keras 用户,你的工作效率更高,能够比竞争对手更快地尝试更多创意,从而帮助你赢得机器学习竞赛

  • 这种易用性并不以降低灵活性为代价:因为 Keras 与底层深度学习语言(特别是 TensorFlow)集成在一起,所以它可以让你实现任何你可以用基础语言编写的东西。特别是,tf.keras 作为 Keras API 可以与 TensorFlow 工作流无缝集成

Keras有两种工作模式:顺序式和功能式。顺序式类型是为简单的体系结构设计的,这种情况下我们只想以线性方式堆叠层。功能式API可以支持具有不同结构的更为通用的模型,例如多输出模型。

顺序模型:

import keras
from keras.models import Sequential
from keras.layers import Dense,Activation
#模型的创建 线性叠加,需要多层时添加更多add即可
model=Sequential()
model.add(Dense(units=64,input_dim=784))
model.add(Activation('softmax'))
#模型的配置
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
#可以使用.optimizers以更好的组合(学习率,方法等)设置优化器
optimizer=keras.optimizers.SGD(lr=0.02,momentum=0.8,nesterov=True)
#训练模型
model.fit(x_train,y_train,epochs=10,batch_size=128)
#模型评估
model.evaluate(x_test,y_test,batch_size=64)
#模型预测
classex=model.predict(x_test,batch_size=128)

功能模型:

功能模型与顺序模型的主要区别在于:首先定义我们的输入和输出,然后才实例化模型。

inputs=Input(shape=(784,))
#定义模型
x=Dense(64,activation='relu')(input)
x=Dense(32,activation='relu')(x)
outputs=Dense(10,activation='softmax')(x)
#实例化模型 将输入和输出传递给Model
model=Model(inputs=inputs,outputs=outputs)
#训练模型以及模型的评估与顺序式相同
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train,y_train,epochs=10,batch_size=128)

例子:使用keras编写自编码器

from keras.layers import Input,Conv2D,MaxPooling2D,UpSampling2D
from keras.models import Model
from keras.callbacks import TensorBoard,ModelCheckpoint
from keras.datasets import cifar10
import numpy as np
(x_train,y_train),(x_test,y_test)=cifar10.load_data()

x_train=x_train[np.where(y_train==1)[0],:,:,:]
x_test=x_test[np.where(y_test==1)[0],:,:,:]
x_train=x_train.astype('float32')/255
x_test=x_test.astype('float32')/255

x_train_n=x_train+0.5*(np.random.normal(loc=0.0,scale=0.4,size=x_train.shape))
x_test_n=x_test+0.5*(np.random.normal(loc=0.0,scale=0.4,size=x_test.shape))
x_train_n=np.clip(x_train_n,0.,1.)
x_test_n=np.clip(x_test_n,0.,1.)

inp_img=Input(shape=(32,32,3))
img=Conv2D(32,(3,3),activation='relu',padding='same')(inp_img)
img=MaxPooling2D((2,2),padding='same')(img)
img=Conv2D(32,(3,3),activation='relu',padding='same')(img)
img=UpSampling2D((2,2))(img)
decoded=Conv2D(3,(3,3),activation='sigmoid',padding='same')(img)
autoencoder=Model(inp_img,decoded)
autoencoder.compile(optimizer='adadelta',loss='binary_crossentropy')

tensroboard=TensorBoard(log_dir='log2',histogram_freq=0,write_graph=True,write_images=True)
model_saver=ModelCheckpoint(filepath='model_save',verbose=0,period=2)
autoencoder.fit(x_train_n,x_train,epochs=10,batch_size=64,shuffle=True,validation_data=(x_test_n,x_test),callbacks=[tensroboard,model_saver])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值