项目进度:
完成了考生答案的得分类别预测,目前在少量标记样本的条件下获得了70%左右的正确率。
完成过程:
建立了两层MLP网络,针对题目建立了得分类别的one—hot矩阵,鉴于本题有两个知识点,建立三维矩阵分别对应0分,1.5分和3分,并开始训练。
网络架构:
class TwoLayerNet:
def __init__(self, input_size, hidden_size, output_size, file_name):
I, H, O = input_size, hidden_size, output_size
# if file_name is None:
# file_name = self.__class__.__name__ + '.pkl'
# if '/' in file_name:
# file_name = file_name.replace('/', os.sep)
if not os.path.exists(file_name):
print("path one!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
# raise IOError('No file: ' + file_name)
W1 = 0.01 * np.random.randn(I, H)
b1 = np.zeros(H)
W2 = 0.01 * np.random.randn(H, O)
b2 = np.zeros(O)
# 生成层
self.layers = [
Affine(W1, b1),
# Sigmoid(),
Affine(W2, b2)
]
self.loss_layer = SoftmaxWithLoss()
# 将所有的权重和偏置整理到列表中
self.params, self.grads = [], []
for layer in self.layers:
self.params += layer.params
self.grads += layer.grads
模型的保存:
BaseModel.save_params(model,'two_layer_net2.pkl')
模型的调用:
with open(file_name, 'rb') as f:
params = pickle.load(f)
self.params = params
params = [p.astype('f') for p in params]
预测结果及准确率:
loss稳定在0.7-0.8