tf.keras高层API

一、定义网络

keras.sequential :层的容器
keras.layers.Layer 所有的层都要继承这个类
keras.Model:继承了Model的类都有compile/fit/evaluate这几个功能

model = Sequential([
    layers.Dense(256,activation=tf.nn.relu) #[b,784] => [b,256],输入维度会默认有
    ,layers.Dense(128,activation=tf.nn.relu) #[b,256] => [b,128]
    ,layers.Dense(64,activation=tf.nn.relu) #[b,128] => [b,64]
    ,layers.Dense(32,activation=tf.nn.relu) #[b,64] => [b,32]
    ,layers.Dense(10) #[b,32] => [b,10]
	]) 
	
model.build(input_shape=[None,28*28])
print(model.summary())  #查看定义的网格

model.trainable_variables——查看网格的所有参数
model.call()——model(x)会自动调用model.call()方法;model.call()方法又会自动调用model.call()方法

自定义层

class MyDense(layers.Layer):
    def __init__(self, inp_dim,outp_dim):
        super(MyDense, self).__init__()

        self.kernel = self.add_variable('w',[inp_dim,outp_dim]) #此处可以修改
        self.bias = self.add_variable('b',[outp_dim])#此处可以修改

    def call(self, inputs, training=None):
        out = inputs @ self.kernel + self.bias
        return out

自定义网络

##自定义网络
class MyModel(keras.Model):
    def __init__(self):
        super(MyModel,self.__init__())
        self.fc1 = MyDense(28*28, 256)
        self.fc2 = MyDense(256,128)
        self.fc3 = MyDense(128,64)
        self.fc4 = MyDense(64,32)
        self.fc5 = MyDense(32,10)

    def call(self, inputs, training=None):
        x = self.fc1(inputs)
        x = tf.nn.relu(x)
        x = self.fc2(x)
        x = tf.nn.relu(x)
        x = self.fc3(x)
        x = tf.nn.relu(x)
        x = self.fc4(x)
        x = tf.nn.relu(x)
        x = self.fc5(x)
        return x

二、实例化网络

network.compile(optimizer = optimizers.Adam(lr = 0.001)	#设置优化器
				,loss = tf.losses.CategoricalCrossentropy(from_logits = True)	#设置loss
				,metrics = ['accuracy']	#设置评估器
				)

三、训练网格

network.fit(db, epochs = 10)

四、测试网格

1、在训练的过程中测试

network.compile(optimizer = optimezeers.Adam(lr = 0.001)	#设置优化器
				,loss = tf.losses.CategoricalCrossentropy(from_logits = True)	#设置loss
				,metrics = ['accuracy']	#设置评估器

network.fit(db, epochs = 10
			, validation_data = ds_val	#这个参数输入测试的数据
			, validation_steps = 2	#这个参数表示每训练两次结果测试一下结果
			)

2、在训练完后进行测试

network.compile(optimizer = optimezeers.Adam(lr = 0.001)	#设置优化器
				,loss = tf.losses.CategoricalCrossentropy(from_logits = True)	#设置loss
				,metrics = ['accuracy']	#设置评估器

network.fit(db, epochs = 10)
network.evaluate(ds_val)

五、预测结果——没有封装

sample = next(iter(ds_val))
x = sample[0]
y = sample[1]	#one-hot
pred = network.predict(x)	#[b,10]
#convert back to number
y = tf.argmax(y, axis=1)
pred = tf.argmax(pred,axis =1)
print(pred)
print(y)

六、模型保存

save/load weights —— 只保存参数

#保存参数
model.save_weights('地址')

#加载参数,加载前必须创建和保存参数前一模一样的网络
model = create_model()
model.load_weights('地址')

loss,acc = model.evaluate(test_data,test_labels)

save/load entire model —— 所有都保存

#保存模型的所有信息
model.save('地址')

#加载模型,不需要再进行network = Sequentia()这个步骤
network = tf.keras.models.load_model('地址')

loss,acc = model.evaluate(test_data,test_labels)

saved_model —— 保存标准的模型格式,其它语言都可以解析

saved_model就是一种标准的保存格式

tf.saved_model.save(m,'地址')
imported = tf.saved_model.load(path)
f = imported.signatures['serving_default']

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值