zoukankan      html  css  js  c++  java
  • CIFAR100与VGG13实战

    CIFAR100

    37-CIFAR100与VGG13实战-cifar100.jpg

    13 Layers

    37-CIFAR100与VGG13实战-13层.jpg

    cafar100_train

    import tensorflow as tf
    from tensorflow.keras import layers, optimizers, datasets, Sequential
    import os
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    
    conv_layers = [
        # 5 units of conv + max polling
        # unit 1
        layers.Conv2D(64,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.Conv2D(64,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
    
        # unit2
        layers.Conv2D(128,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.Conv2D(128,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
    
        # unit3
        layers.Conv2D(256,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.Conv2D(256,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
    
        # unit4
        layers.Conv2D(512,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.Conv2D(512,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
    
        # unit5
        layers.Conv2D(512,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.Conv2D(512,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
    ]
    
    
    def preprocess(x, y):
        # [0-1]
        x = tf.cast(x, dtype=tf.float32) / 255.
        y = tf.cast(y, dtype=tf.int32)
        return x, y
    
    
    (x, y), (x_test, y_test) = datasets.cifar100.load_data()
    y = tf.squeeze(y, axis=1)
    y_test = tf.squeeze(y_test, axis=1)
    print(x.shape, y.shape, x_test.shape, y_test.shape)
    
    train_db = tf.data.Dataset.from_tensor_slices((x, y))
    train_db = train_db.shuffle(1000).map(preprocess).batch(64)
    
    test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
    test_db = test_db.map(preprocess).batch(64)
    
    
    def main():
    
        # [b,32,32,3]-->[b,1,1,512]
        conv_net = Sequential(conv_layers)
        conv_net.build(input_shape=[None, 32, 32, 3])
        #     x = tf.random.normal([4, 32, 32, 3])
        #     out = conv_net(x)
        #     print(out.shape)
    
        fc_net = Sequential([
            layers.Dense(256, activation=tf.nn.relu),
            layers.Dense(128, activation=tf.nn.relu),
            layers.Dense(100, activation=None),
        ])
    
        conv_net.build(input_shape=[None, 32, 32, 3])
        fc_net.build(input_shape=[None, 512])
        optimizer = optimizers.Adam(lr=1e-4)
        
        # [1,2]+[3,4] = [1,2,3,4]
        variables = conv_net.trainable_variables + fc_net.trainable_variables
    
        for epoch in range(3):
            for step, (x, y) in enumerate(train_db):
                with tf.GradientTape() as tape:
                    # [b,32,32,3]
                    out = conv_net(x)
                    # flatten ==> [b,512]
                    out = tf.reshape(out, [-1, 512])
                    # [b,512] --> [b,100]
                    logits = fc_net(out)
                    # [b] --> [b,100]
                    y_onehot = tf.one_hot(y, depth=100)
                    # compute loss
                    loss = tf.losses.categorical_crossentropy(y_onehot,logits,from_logits=True)
                    loss = tf.reduce_mean(loss)
                    
                grads = tape.gradient(loss,variables)
                optimizer.apply_gradients(zip(grads,variables))
                
                if step % 100 ==0:
                    print(epoch,step,'loss:',float(loss))
                
            total_num = 0
            total_correct = 0
            for x,y in test_db:
    
                out = conv_net(x)
                out = tf.reshape(out, [-1, 512])
                logits = fc_net(out)
                prob = tf.nn.softmax(logits, axis=1)
                pred = tf.argmax(prob, axis=1)
                pred = tf.cast(pred, dtype=tf.int32)
    
                correct = tf.cast(tf.equal(pred, y), dtype=tf.int32)
                correct = tf.reduce_sum(correct)
    
                total_num += x.shape[0]
                total_correct += int(correct)
    
            acc = total_correct / total_num
            print(epoch, 'acc:', acc)
                
    
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    axios取消请求
    echarts常用图表配置
    Vue指令限制输入框输入整数小数
    小程序商品飞入购物车组件
    webpack按测试和生产环境进行编译
    地图画线添加标签
    vue-element-admin 动态侧边栏
    html2canvas 和浏览器打印
    echarts 指定某段曲线颜色
    列出表结构
  • 原文地址:https://www.cnblogs.com/nickchen121/p/10939750.html
Copyright © 2011-2022 走看看