程序员每天进步一点点

2020-05-13【TF2时间序列建模过程+Kubernete

2020-05-13  本文已影响0人  桢桢claire
海上日出

今日鸡汤:

卡夫卡说:
“信仰是什么?
相信一切事和一切时刻的合理的内在联系,
相信生活作为整体将永远继续下去,
相信最近的东西和最远的东西。”

一个人相信什么,他未来的人生就会靠近什么。与你共勉。

Eat TensorFlow 2.0 in 30 days (1-4)

今天学了使用时间序列数据,用函数式API定义4层LSTM网络做预测问题,同样,还是按照Tensorflow的一般流程总结一下:

准备数据

  1. 用Pandas导入数据: pd.read_csv()
  2. 用Pandas查看总体数据趋势:df.plot(),会按照每一列绘制一条曲线。
  3. 对于时间序列数据,查看差分情况,可以用diff函数将数据进行某种移动之后与原数据进行比较得出差异数据:dfdata.diff(periods=1)
  4. 对数据分batch: dataset.batch()

定义模型

使用函数式API构建模型:

tf.keras.backend.clear_session()

x_input = layers.Input(shape = (None,3),dtype = tf.float32)
x = layers.LSTM(3,return_sequences = True,input_shape=(None,3))(x_input)
x = layers.LSTM(3,return_sequences = True,input_shape=(None,3))(x)
x = layers.LSTM(3,return_sequences = True,input_shape=(None,3))(x)
x = layers.LSTM(3,input_shape=(None,3))(x)
x = layers.Dense(3)(x)

x = Block()(x_input,x)
model = models.Model(inputs = [x_input],outputs = [x])
model.summary()

训练模型

采用fit方法。使用Adam优化器,用MSPE做loss:

optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
model.compile(optimizer=optimizer,loss=MSPE(name = "MSPE"))

对于RNN设置多个学习率进行尝试,监控loss指标,并使用Keras 提供的多种回调函数调整训练状态:
1)ReduceLROnPlateau:当指标停止提升时,降低学习速率。一旦学习停止,模型通常会将学习率降低2-10倍。该回调监测数量,如果没有看到epoch的 'patience' 数量的改善,那么学习率就会降低。
2)EarlyStopping:当监测数量停止改善时停止训练。

tb_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
#如果loss在100个epoch后没有提升,学习率减半。
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(monitor="loss",factor = 0.5, patience = 100)
#当loss在200个epoch后没有提升,则提前终止训练。
stop_callback = tf.keras.callbacks.EarlyStopping(monitor = "loss", patience= 200)
callbacks_list = [tb_callback,lr_callback,stop_callback]

history = model.fit(ds_train,epochs=500,callbacks = callbacks_list)

评估模型

使用plt.plot(epochs, train_metrics)方法可视化模型loss随Epoch的变化。

使用模型

该任务为预测任务,先用一个循环生成未来100天的数据,之后做query。

model.predict(tf.constant(tf.expand_dims(dfresult.values[-38:,:],axis = 0)))

保存模型

使用tf原生方式保存模型,同样,设置save_format为tf即可:

model.save('./data/tf_model_savedmodel', save_format="tf")

Kubernetes 权威指南

Kubernetes是什么?
一个基于容器技术的分布式架构方案,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率最大化。

Pod是什么?
Pod=1个Pause容器+一堆用户业务容器

Replication Controller是什么?
RC声明期待系统中某种Pod的副本数量在任意时刻都符合该预期值,定义包括:

Deployment是什么?
Deployment其实跟RC差不多,只不过能看到当前Pod部署的进度。

Service是什么?

Service

Service其实就是微服务,定义了一个服务的访问入口地址,前端应用通过该入口地址通过Label Selector访问背后的Pod组成的集群实例。

它的特征有:

Service与Pod怎么关联?
Kubernetes首先给每个Pod贴上一个Label,然后给相应的Service定义标签选择器(Label Selector),这样这个service会作用于所有包含该Label的Pod上。

Kubernetes怎么管理集群?
Kubernetes集群=1个Master+一堆Node

Kubernetes的服务发现机制?
对Service来说,每个service都有单独的Cluster IP和唯一的名称,固定在配置中,因此只需要根据Service名称找到对应的Cluster IP,Kubernetes引入DNS系统,将服务名作为DNS域名解决服务发现问题。

如何在集群外面访问Service?
在service定义中指定NodePort,K8S中的每个Node都会开启一个对应的TCP监听端口。
也可以在servcie定义中制定LoadBalancer,K8S会自动创建一个LoadBalancer实例并返回IP供外部客户端使用。

上一篇下一篇

猜你喜欢

热点阅读