tensorflow2.0教程之Keras快速入门
Keras是一个用于构建和训练深度学习模型的高阶API。它可用于快速设计原型、高级研究和生产。keras的3个优点:
方便用户使用、模块化和可组合、易于扩展
1.导入tf.keras
tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)
importtensorflowastf fromtensorflow.kerasimportlayers print(tf.__version__) print(tf.keras.__version__)
2.构建简单模型
2.1模型堆叠
最常见的模型类型是层的堆叠:tf.keras.Sequential模型
model=tf.keras.Sequential() model.add(layers.Dense(32,activation='relu')) model.add(layers.Dense(32,activation='relu')) model.add(layers.Dense(10,activation='softmax'))
2.2网络配置
tf.keras.layers中网络配置:
activation:设置层的激活函数。此参数由内置函数的名称指定,或指定为可调用对象。默认情况下,系统不会应用任何激活函数。
kernel_initializer和bias_initializer:创建层权重(核和偏差)的初始化方案。此参数是一个名称或可调用对象,默认为“Glorotuniform”初始化器。
kernel_regularizer和bias_regularizer:应用层权重(核和偏差)的正则化方案,例如L1或L2正则化。默认情况下,系统不会应用正则化函数。
layers.Dense(32,activation='sigmoid') layers.Dense(32,activation=tf.sigmoid) layers.Dense(32,kernel_initializer='orthogonal') layers.Dense(32,kernel_initializer=tf.keras.initializers.glorot_normal) layers.Dense(32,kernel_regularizer=tf.keras.regularizers.l2(0.01)) layers.Dense(32,kernel_regularizer=tf.keras.regularizers.l1(0.01))
3.训练和评估
3.1设置训练流程
构建好模型后,通过调用compile方法配置该模型的学习流程:
model=tf.keras.Sequential() model.add(layers.Dense(32,activation='relu')) model.add(layers.Dense(32,activation='relu')) model.add(layers.Dense(10,activation='softmax')) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss=tf.keras.losses.categorical_crossentropy, metrics=[tf.keras.metrics.categorical_accuracy])
3.2输入Numpy数据
importnumpyasnp train_x=np.random.random((1000,72)) train_y=np.random.random((1000,10)) val_x=np.random.random((200,72)) val_y=np.random.random((200,10)) model.fit(train_x,train_y,epochs=10,batch_size=100, validation_data=(val_x,val_y))
3.3tf.data输入数据
dataset=tf.data.Dataset.from_tensor_slices((train_x,train_y)) dataset=dataset.batch(32) dataset=dataset.repeat() val_dataset=tf.data.Dataset.from_tensor_slices((val_x,val_y)) val_dataset=val_dataset.batch(32) val_dataset=val_dataset.repeat() model.fit(dataset,epochs=10,steps_per_epoch=30, validation_data=val_dataset,validation_steps=3)
3.4评估与预测
test_x=np.random.random((1000,72)) test_y=np.random.random((1000,10)) model.evaluate(test_x,test_y,batch_size=32) test_data=tf.data.Dataset.from_tensor_slices((test_x,test_y)) test_data=test_data.batch(32).repeat() model.evaluate(test_data,steps=30)
#predict result=model.predict(test_x,batch_size=32) print(result)
4.构建高级模型
4.1函数式api
tf.keras.Sequential模型是层的简单堆叠,无法表示任意模型。使用Keras函数式API可以构建复杂的模型拓扑,例如:
多输入模型,
多输出模型,
具有共享层的模型(同一层被调用多次),
具有非序列数据流的模型(例如,残差连接)。
使用函数式API构建的模型具有以下特征:
层实例可调用并返回张量。
输入张量和输出张量用于定义tf.keras.Model实例。
此模型的训练方式和Sequential模型一样。
input_x=tf.keras.Input(shape=(72,)) hidden1=layers.Dense(32,activation='relu')(input_x) hidden2=layers.Dense(16,activation='relu')(hidden1) pred=layers.Dense(10,activation='softmax')(hidden2) model=tf.keras.Model(inputs=input_x,outputs=pred) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss=tf.keras.losses.categorical_crossentropy, metrics=['accuracy']) model.fit(train_x,train_y,batch_size=32,epochs=5)
4.2模型子类化
通过对tf.keras.Model进行子类化并定义您自己的前向传播来构建完全可自定义的模型。在init方法中创建层并将它们设置为类实例的属性。在call方法中定义前向传播
classMyModel(tf.keras.Model): def__init__(self,num_classes=10): super(MyModel,self).__init__(name='my_model') self.num_classes=num_classes self.layer1=layers.Dense(32,activation='relu') self.layer2=layers.Dense(num_classes,activation='softmax') defcall(self,inputs): h1=self.layer1(inputs) out=self.layer2(h1) returnout defcompute_output_shape(self,input_shape): shape=tf.TensorShapej(input_shape).as_list() shape[-1]=self.num_classes returntf.TensorShape(shape) model=MyModel(num_classes=10) model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss=tf.keras.losses.categorical_crossentropy, metrics=['accuracy']) model.fit(train_x,train_y,batch_size=16,epochs=5)
4.3自定义层
通过对tf.keras.layers.Layer进行子类化并实现以下方法来创建自定义层:
build:创建层的权重。使用add_weight方法添加权重。
call:定义前向传播。
compute_output_shape:指定在给定输入形状的情况下如何计算层的输出形状。
或者,可以通过实现get_config方法和from_config类方法序列化层。
classMyLayer(layers.Layer): def__init__(self,output_dim,**kwargs): self.output_dim=output_dim super(MyLayer,self).__init__(**kwargs) defbuild(self,input_shape): shape=tf.TensorShape((input_shape[1],self.output_dim)) self.kernel=self.add_weight(name='kernel1',shape=shape, initializer='uniform',trainable=True) super(MyLayer,self).build(input_shape) defcall(self,inputs): returntf.matmul(inputs,self.kernel) defcompute_output_shape(self,input_shape): shape=tf.TensorShape(input_shape).as_list() shape[-1]=self.output_dim returntf.TensorShape(shape) defget_config(self): base_config=super(MyLayer,self).get_config() base_config['output_dim']=self.output_dim returnbase_config @classmethod deffrom_config(cls,config): returncls(**config) model=tf.keras.Sequential( [ MyLayer(10), layers.Activation('softmax') ]) model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss=tf.keras.losses.categorical_crossentropy, metrics=['accuracy']) model.fit(train_x,train_y,batch_size=16,epochs=5)
4.3回调
callbacks=[ tf.keras.callbacks.EarlyStopping(patience=2,monitor='val_loss'), tf.keras.callbacks.TensorBoard(log_dir='./logs') ] model.fit(train_x,train_y,batch_size=16,epochs=5, callbacks=callbacks,validation_data=(val_x,val_y))
5保持和恢复
5.1权重保存
model=tf.keras.Sequential([ layers.Dense(64,activation='relu'), layers.Dense(10,activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy']) model.save_weights('./weights/model') model.load_weights('./weights/model') model.save_weights('./model.h5') model.load_weights('./model.h5')
5.2保存网络结构
#序列化成json importjson importpprint json_str=model.to_json() pprint.pprint(json.loads(json_str)) fresh_model=tf.keras.models.model_from_json(json_str) #保持为yaml格式#需要提前安装pyyaml yaml_str=model.to_yaml() print(yaml_str) fresh_model=tf.keras.models.model_from_yaml(yaml_str)
5.3保存整个模型
model=tf.keras.Sequential([ layers.Dense(10,activation='softmax',input_shape=(72,)), layers.Dense(10,activation='softmax') ]) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(train_x,train_y,batch_size=32,epochs=5) model.save('all_model.h5') model=tf.keras.models.load_model('all_model.h5')
6.将keras用于Estimator
EstimatorAPI用于针对分布式环境训练模型。它适用于一些行业使用场景,例如用大型数据集进行分布式训练并导出模型以用于生产
model=tf.keras.Sequential([layers.Dense(10,activation='softmax'), layers.Dense(10,activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['accuracy']) estimator=tf.keras.estimator.model_to_estimator(model)
到此这篇关于tensorflow2.0教程之Keras快速入门的文章就介绍到这了,更多相关Keras快速入门内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。