如何使用张量流(Keras)进行一次交叉验证?

我有20个主题,当我训练使用Tensorflow实现的模型时,我想使用留一法交叉验证。我遵循一些指示,最后是我的伪代码:

for train_index,test_index in loo.split(data):
print("TRAIN:",train_index,"TEST:",test_index)
train_X=np.concatenate(np.array([data[ii][0] for ii in train_index]))
train_y=np.concatenate(np.array([data[ii][1] for ii in train_index]))

test_X=np.concatenate(np.array([data[ii][0] for ii in test_index]))
test_y=np.concatenate(np.array([data[ii][1] for ii in test_index]))


train_X,train_y = shuffle(train_X,train_y)
test_X,test_y = shuffle(test_X,test_y)



#Compile the model
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

#keras.initializers.RandomNormal(mean=0.0,stddev=0.05,seed=None)

#Train the model
model.fit(train_X,train_y,batch_size=16,epochs=30,validation_split=.10)#,callbacks=[])

#test accuracy
test_loss,test_acc = model.evaluate(test_X,test_y)
print('\nTest accuracy:',test_acc)

但是第一个主题之后的结果是这样的:

Epoch 30/30
3590/3590 [==============================] - 4s 1ms/sample - loss: 0.5976 - 
**acc: 0.8872** - val_loss: 1.3873 - val_acc: 0.6591


255/255 [==============================] - 0s 774us/sample - loss: 1.8592 - 
acc: 0.4471

Test accuracy: 0.44705883

第二次迭代(主题):

TRAIN: [ 0  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17] TEST: [1]

Train on 3582 samples,validate on 398 samples
Epoch 1/30
3582/3582 [==============================] - 5s 1ms/sample - loss: 0.7252 - 
**acc: 0.8238** - val_loss: 1.0627 - val_acc: 0.6859

听起来该模型使用了先前的重量!如果我们看一下第二次迭代的第一精度,则从acc:0.8238开始!

我的实现正确吗?还是我需要更多步骤来确定每个主题的初始体重?

alex_mao 回答:如何使用张量流(Keras)进行一次交叉验证?

0.8238是训练数据acc,而不是测试数据。您的fit()方法还对训练数据进行了验证拆分。

根据我的观察,该模型运行良好。您的实现是正确的。

,

在 for 循环中编译之前,您需要添加以下行:

tf.keras.backend.clear_session()

这将删除 Tensorflow 存储的所有图形和会话信息,包括您的图形权重。您可以查看源代码 here 及其作用的说明 here

本文链接:https://www.f2er.com/3141303.html

大家都在问