前面实作初步的Learned Index并进行测试,今天我们要来实作出Learned Index的完全体!!XD
其实不是完全体,也只是模拟拉 XD
Learned Index 的架构可以分为 LIF、RMI、Search Method,但是,Kraska et al.说明LIF为测试框架,并无完整介绍实际架构为何,因此本次模拟实作Learned Index不包括LIF框架。
Learned Index的主要架构围绕着 Recursive Model Index(RMI),叠带式的模型索引架构,但是RMI的架构有几层?每层有几个模型?这是可以自行定义,根据 Kraska et al.测试2层的RMI架构,第一层的Model为1个,可以是0~2层神经网路模型,神经元数量8 or 16最好,第二层的架构则选择简单的线性回归,可以有数个。
首先,我们要建置2层架构Learned Index,第二层的Model数量为自带参数:
class Learned_Index():
def __init__(self, model_num):
self.RMI = [1, model_num] # Learned Index RMI架构
self.index = [] # 储存模型的索引
再来就是建置模型,所谓的建置模型,就是依据我们设定的Learned Index架构来配置我们的模型与其数量:
def build(self):
for m in RMI:
if(m==1):
# 第一层 => 建置 NN Model 8x8
model = Sequential()
model.add(Dense(8, input_dim=1, activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1))
sgd=keras.optimizers.SGD(lr=0.000001) # lr:学习率,可调参数
model.compile(loss="mse", optimizer=sgd, metrics=["mse"])
index.append(model)
else:
# 第二层 => 建置多个简单线性回归
index.append([])
for j in range(m):
model = LinearRegression()
index[1].append(model)
建置完後,我们就要来训练资料噜~
训练资料有点麻烦,因为必须叠带训练,从第一层的1个Model到第二层的多个Models,除此之外,第一层的Model训练完後,要将资料分配至第二层的各个Model,比较复杂一点,我们明天再来实作出剩余的部分并详细解释!
掰铺~~
<<: Feedly 和 Inoreader,用RSS阅读器蒐集实用数位行销blog推荐资讯
前言 最近忙到不知道能不能完赛了 QQ 正文 NAT是一种在IP Packet通过Router或防火...
Colab连结 资料增强(Data Augmentation),是一个当今天资料集样本不多时,透过调...
上一篇有提到,一个浏览器在解析网页时,会将 HTML 内容由上至下一行一行解析成 DOM 的节点, ...
Unit Test 应用於 DateTime-前言-2 今天文章的内容是参考於 C# - how t...
前言 写程序,设定好 IDE,可以增加自己的效率,今天来纪录一下安装 Visual Studio C...