Machine learning 暹罗网络-如何实现它

Machine learning 暹罗网络-如何实现它,machine-learning,keras,neural-network,deep-learning,computer-vision,Machine Learning,Keras,Neural Network,Deep Learning,Computer Vision,我将尝试使用Keras实现这个暹罗NN: 该神经网络应用于将在线签名分类为真伪 因为我是机器学习和神经网络的新手,我想请你帮我编写代码 我试图在谷歌上找到一些预构建的代码,但我没有找到任何完全符合我目标的代码 这是我在python中使用keras库实现的类 将numpy导入为np 从keras.models导入顺序 从keras.layers导入致密、激活、脱落 def构建模型(X_系列、Y_系列): 批量大小=512 n_epoch=20 #我们有2个输入,每个签名1个; 左输入=输入((1

我将尝试使用Keras实现这个暹罗NN:

该神经网络应用于将在线签名分类为真伪

因为我是机器学习和神经网络的新手,我想请你帮我编写代码

我试图在谷歌上找到一些预构建的代码,但我没有找到任何完全符合我目标的代码

这是我在python中使用keras库实现的类

将numpy导入为np
从keras.models导入顺序
从keras.layers导入致密、激活、脱落
def构建模型(X_系列、Y_系列):
批量大小=512
n_epoch=20
#我们有2个输入,每个签名1个;
左输入=输入((1,16000))
右输入=输入((11600))
convnet=Sequential()
add(ConvLSTM2D(过滤器=40,内核大小=(3,3),
输入_形状=(1,16000),
padding='same',返回(序列=True))
convnet.add(BatchNormalization())
#将网络的每个“支路”连接到每个输入
#记住,它们有相同的重量
编码的\u l=convnet(左\u输入)
编码\u r=convnet(右\u输入)
#获取两个编码之间的L1距离
L1\u层=np.连接(编码的\u l,编码的\u r)
#将距离函数添加到网络中
L1_距离=L1_层([encoded_l,encoded_r])
预测=密集(1,激活='sigmoid')(L1_距离)
暹罗网=模型(输入=[左输入,右输入],输出=预测)
优化器=Adam(0.001,衰减=2.5e-4)#不知道这些参数的用途
暹罗网编译(loss=“binary\u crossentropy”,optimizer=optimizer,metrics=['accurity']))
回归模型
如果名称=“\uuuuu main\uuuuuuuu”:
forgeries=np.loadtxt('/content/forgeries.txt',分隔符=',')
genuines=np.loadtxt('/content/genuines.txt',分隔符=',')
X=np.vstack((真币、假币))
Y1=np.一((376,1))
Y2=np.零((94,1))
y=np.连接((Y1,Y2))
模型=建筑模型(X_列车,y)
预测=[]
对于范围内的i(len(X_测试)):
prediction.append(np.ndarray.tolist(model.predict(np.array([X_检验[i]])))[0][0])
阈值=np.平均值(np.数组([预测])
结果=[];计数器=1;标志=1
对于范围内的i(len(预测)):
如果flag==1且预测[i]>thresh:
结果。追加(1)
elif标志==0且预测[i]2:
标志=非标志
计数器=1
#打印预测
#打印结果
精度=(浮点(结果计数(1))/len(结果))*100
印刷精度
我想请你澄清我应该调什么参数,我应该怎么做;另外,我知道我缺少一个层(最后一个),但我不知道如何在代码中添加它