【发布时间】:2020-02-10 09:46:49
【问题描述】:
this article 中有一个使用迁移学习和 LSTM 的基于深度学习的模型,作者使用了 10 倍交叉验证(如表 3 中所述)并取结果的平均值。 我熟悉 10 折交叉验证,因为我们需要划分数据并传递给模型,但是在这段代码中(here)我不知道如何划分数据并传递它。
有两个训练/测试/开发数据集(一个用于情感分析,一个用于情感分析,我们都将其用于迁移学习,但我的重点是情感分析)。原始数据是几个txt格式的文件,运行模型后,它给出了两个新的txt文件,一个用于预测标签,一个用于真实标签。
main file中有一行代码:
model = BiLstm(args, data, ckpt_path='./' + args.data_name + '_output/')
if args.mode=='train':
model.train(data)
sess = model.restore_last_session()
model.predict(data, sess)
if args.mode=='test':
sess = model.restore_last_session()
model.predict(data, sess)
其中“数据”是一类数据(code),包括测试/训练/开发数据集: 我想我需要在这里传递分割的数据。如果我是对的,我该如何进行分区并执行 10 折交叉验证?
data = Data('./data/'+args.data_name+'data_sample.bin','./data/'+args.data_name+'vocab_sample.bin',
'./data/'+args.data_name+'word_embed_weight_sample.bin',args.batch_size)
class Data(object):
def __init__(self,data_path,vocab_path,pretrained,batch_size):
self.batch_size = batch_size
data, vocab ,pretrained= self.load_vocab_data(data_path,vocab_path,pretrained)
self.train=data['train']
self.valid=data['valid']
self.test=data['test']
self.train2=data['train2']
self.valid2=data['valid2']
self.test2=data['test2']
self.word_size = len(vocab['word2id'])+1
self.max_sent_len = vocab['max_sent_len']
self.max_topic_len = vocab['max_topic_len']
self.word2id = vocab['word2id']
word2id = vocab['word2id']
#self.id2word = dict((v, k) for k, v in word2id.iteritems())
self.id2word = {}
for k, v in six.iteritems(word2id):
self.id2word[v]=k
self.pretrained=pretrained
【问题讨论】:
-
基本上是K-fold,这意味着每次测试数据是整个人口的不同p%(通常是10%)时,您需要运行n次(通常是10)次,因为数据是与模型集成(
constructor的参数),您唯一的选择是覆盖/复制它的train(),如果您可以在此处发布并分享您到目前为止所做的事情,可能会有很大帮助 -
@shahaf 火车在这里link 在页面中间。如果我们只需要更改测试数据,我可以更改类Data中的
self.test=data['test'],而不是更改train()吗?谢谢
标签: python machine-learning deep-learning cross-validation k-fold