zoukankan      html  css  js  c++  java
  • Tensorflow05-简单的全连接神经网络案例

    第一个神经元网络就使用最简单的全连接神经网络。

    使用tensorflow里的 fashion_mnist 服饰数据集 来完成此次的入门案例,建议使用 jupyter 分步执行,每步都理解掌握。

    数据集介绍:大概60000张图片,分成了衣服帽子鞋子等等10个类别。每张图片是由 28*28 个像素组成的,每个像素取值 0 ~ 255。

    import tensorflow as tf
    from tensorflow import keras
    import matplotlib.pyplot as plt
    
    
    # 加载数据集
    fashion_mnist = keras.datasets.fashion_mnist
    # 得到训练/测试 数据,训练/测试 标签
    (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
    
    # 查看数据形状
    train_images.shape, train_labels.shape
    
    plt.imshow(test_images[0])   # 画图用  imshow !
    
    # 创建神经元模型
    model = keras.Sequential()
    # 第一层使用Flatten
    model.add(keras.layers.Flatten(input_shape=(28, 28)))
    model.add(keras.layers.Dense(128, activation=tf.nn.relu))
    model.add(keras.layers.Dense(10, activation=tf.nn.softmax))
    
    # 查看神经网络结构
    model.summary()
    
    #配置训练方法,optimizer(优化器)为 经常使用的Adam,损失函数使用sparse_categorical_crossentropy,注意还有不带sparse的,则表示数据为 独热编码形式的。
    model.compile(optimizer=tf.optimizers.Adam(), loss=tf.losses.sparse_categorical_crossentropy, metrics=['accuracy'])
    
    # 为防止过拟合定义该类
    class myCallback(tf.keras.callbacks.Callback): # 继承自 Callback
        def on_epoch_end(self, epoch, logs={}): # 重写该方法
            if(logs.get('loss') < 0.4): # 如果 loss < 0.4, 认为发生过拟合
                print("
    Loss is low so cancelling training")
                self.model.stop_training = True # 停止训练
    
    callbacks = myCallback()
    
    # 归一化
    train_images = train_images/255
    test_images_scaled = test_images/255
    
    # 训练数据得到 history 对象,最后一个参数表示自动中止训练,类的定义在上方
    history = model.fit(train_images, train_labels, epochs=5, callbacks=[callbacks])
    
    # 利用 测试数据/测试标签 评估模型
    model.evaluate(test_images_scaled, test_labels)
    
    # 预测数据,并提取第一个(0)的预测结果
    model.predict(test_images_scaled)[0]

     对该案例代码中的一些解释:

    首先这个数据集的每个元素是二维的,即这个数据集存放着若干张图片,每个图片是一个像素 28*28 的二维矩阵存储。

    所以我们的模型第一层使用 Flatten,作用是将二维输入数据转换成一维的。也就是输入层。

    Dense 表示全连接网络,至于参数 激活函数 activation 在上篇博客中有详细解释。

    第二个 Dense 是输出层,一共有 10 个类别,所以输出的神经元个数为 10。这层也叫输出层。

    介于输入输出层之间为 隐含层,这里的隐含层只有一个,也是 Dense,这里神经元数量128,可以自己更改,以得到更好的训练结果。

    配置模型的编译 compile ,优化器为 Adam(),损失函数为 sparse_categorical_crossentropy

    自定义的 Callback 的继承类,防止过拟合。

    fit 训练数据

    evaluate 利用测试集评估模型

    predict 预测数据

  • 相关阅读:
    如何解决错误【selenium.common.exceptions.SessionNotCreatedException】
    VSFTP常用功能及参数配置
    ROS白名单服务端PHP脚本,客户端ROS脚本
    ocserver标准配置文件
    linux send与recv函数详解
    LINUX 恢复rm删除的文件
    C语言实现md5函数代码
    linux c语言获取CPU,内存,网速,磁盘使用,IO
    linux c语言fork socket 并发回射服务器
    杨惠兰不值得任何人付出
  • 原文地址:https://www.cnblogs.com/dongao/p/14380534.html
Copyright © 2011-2022 走看看