示例#1
0
def main(args):
    # 数据加载
    (x_train, y_train), (x_test, y_test) = load_cifar(args.cifar_root)

    # 随机选择训练样本
    train_num = x_train.shape[0]

    def next_batch(batch_size):
        idx = np.random.choice(train_num, batch_size)
        return x_train[idx], y_train[idx]

    # 网络
    vgg = VGG(image_size=32, name='vgg11')
    opt = RmsProp(vgg.weights, lr=args.lr, decay=1e-3)

    # 加载权重
    if args.checkpoint:
        weights = load_weights(args.checkpoint)
        vgg.load_weights(weights)
        print("load weights done")

    # 评估
    if args.eval_only:
        indices = np.random.choice(len(x_test), args.eval_num, replace=False)
        print('{} start evaluate'.format(
            time.asctime(time.localtime(time.time()))))
        acc = get_accuracy(vgg, x_test[indices], ys=y_test[indices])
        print('{} acc on test dataset is :{:.3f}'.format(
            time.asctime(time.localtime(time.time())), acc))
        return

    # 训练
    num_steps = args.steps
    for step in range(num_steps):
        x, y_true = next_batch(args.batch_size)
        # 前向传播
        y_predict = vgg.forward(x.astype(np.float))
        # print('y_pred: min{},max{},mean:{}'.format(np.min(y_predict, axis=-1),
        #                                            np.max(y_predict, axis=-1),
        #                                            np.mean(y_predict, axis=-1)))
        # print('y_pred: {}'.format(y_predict))
        acc = np.mean(
            np.argmax(y_predict, axis=1) == np.argmax(y_true, axis=1))
        # 计算loss
        loss, gradient = cross_entropy_loss(y_predict, y_true)

        # 反向传播
        vgg.backward(gradient)
        # 更新梯度
        opt.iterate(vgg)

        # 打印信息
        print('{} step:{},loss:{:.4f},acc:{:.4f}'.format(
            time.asctime(time.localtime(time.time())), step, loss, acc))

        # 保存权重
        if step % 100 == 0:
            save_weights(
                os.path.join(args.save_dir, 'weights-{:03d}.pkl'.format(step)),
                vgg.weights)
示例#2
0
from vgg import VGG
import os

model = VGG()
print(model.summary())
weights = './model/emotion_best_weights.h5'
if os.path.exists(weights):
    print("Loading weight")
    model.load_weights(weights)
    print("Saving model")
    model.save("./model/emotion_recognition.h5")