• TensorFlow 入门实操课程-Day1


    学习网址:https://www.icourse163.org/learn/youdao-1460578162?tid=1461280442#/learn/content

    1、入门第一课
    ·神经元网络适合处理float
    构建模型-优化和损失函数-准备训练数据-训练模型-评估数据
    loss越来越小,说明实验靠谱
    keras强大简单的API,将神经元网络模型定义为一组Sequential层

    from tensorflow import keras
    import numpy as np
    #构建模型
    model=keras.Sequential([keras.layers.Dense(units=1,input_shape=[1])])
    #优化和损失函数
    model.compile(optimizer='sgd',loss='mean_squared_error')
    #准备训练数据
    xs=np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype=float)
    ys=np.array([-3.0,-1.0,1.0,3.0,5.0,7.0],dtype=float)
    #训练模型
    model.fit(xs,ys,epochs=500)
    #验证数据,接近19
    model.predict([10.0])

    2、计算机视觉(图片)
    根据图片灰度来识别
    ·加载Fashion MNIST数据集

    import tensorflow as tf
    from tensorflow import keras
    fashion_mnist = keras.datasets.fashion_mnist
    #(用来训练的数据集,标签),(测试用的图片,标签)
    (train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
    ·查看数据集
    #训练集:6w张像素为28x28的图片(60000, 28, 28)
    print(train_images.shape)
    #测试集:(10000, 28, 28)
    print(test_images.shape)
    #查看图片具体灰度值
    print(train_images[0])
    #查看第一张图片
    import matplotlib.pyplot as plt
    plt.imshow(train_images[0])

    ·构造模型
    三层结构:全连接网络结构
    第一层:输入层,训练集都是28x28=shape也是28x28

    第二层:中间层,128个神经元,任意定,可以修改
    理论:28x28x128=100352
    实际:每一层自动加1个bias,截距
    (28*28+1)*128=100480

    第三层:输出层,要分的类别有10个=10个神经元
    理论:128*10=1280
    实际:每一层自动加1个bias,截距
    (128+1)*10=1290

    Sequential:定义了神经网络中的层数序列。一开始学习神经元网络总是使用序列模型。

    Flatten:把二维数组变成一维数组。

    Dense:增加一层神经元。

    每一层神经元都需要一个激活函数 activation来告诉它们输出什么。有很多选项,但目前只用这些(relu和softmax)。

    Relu: "如果X>0返回X,否则返回0"--所以它的作用是它只把大于0的值传递给网络中的下一层,小于0的也当作0。

    Softmax:激活函数接收到一组值后,选择其中最大的一个输出。

    例如,上一层的输出为[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05],Softmax就省去了你在其中寻找最大的值,并把它变成[0,0,0,0,0,1,0,0,0,0,0]

    "如果X>0,则返回X,否则返回0" -- 所以它的作用是只把0或更大的值传给下一层的网络。--其目的是节省大量的编码

    model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(128,activation=tf.nn.relu),
    keras.layers.Dense(10,activation=tf.nn.softmax)
    ])
    #另一种写法
    model = keras.Sequential()
    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()

    ·训练模型

    train_images=train_images/255#让训练集变成0-1之间的数,正确率更高
    model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
    model.fit(train_images,train_labels,epochs=5)
    #Adam()经常使用的优化
    #有类别:用categorical
    #[0,0,0,0,0,0,0,1]=one_hot,只有一个类别,要用categorical_crossentropy

    ·评估模型

    test_images_scaled=test_images/255#前面用了,后面也得用
    model.evaluate(test_images_scaled,test_labels)

    ·用模型来判断单张图片的类别-->predict

    import numpy as np
    import matplotlib.pyplot as plt
    print(np.argmax(model.predict((test_images[0]/255).reshape(1,28,28,1))))#模型运行
    print(test_labels[0])#正确
    plt.imshow(test_images[0])

    ·自动终止训练
    过拟合:训练次数太多,导致对旧数据准确率高,新数据则低
    怎么看是否过拟合:测试loss与训练loss,走势不一致

    
    
    import tensorflow as tf
    from tensorflow import keras
    #回调函数停止运行
    class myCallback(tf.keras.callbacks.Callback):   def on_epoch_end(self,epoch,logs={}):     if (logs.get('loss')<0.4):       print(' Loss is low so cancelling training!')       self.model.stop_training=
    True
    callbacks
    =myCallback() #加载数据集 fashion_mnist = keras.datasets.fashion_mnist (train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()

    #也可以写成train_images, test_images = train_images / 255.0, test_images / 255.0 train_images
    =train_images/255 test_images=test_images/255 #构造模型

    model = keras.Sequential([
         keras.layers.Flatten(input_shape=(28,28)),
         keras.layers.Dense(128,activation=tf.nn.relu),
         keras.layers.Dense(10,activation=tf.nn.softmax)
    ])

    #训练模型
    model.compile(optimizer=tf.optimizers.Adam(),
            loss=tf.losses.sparse_categorical_crossentropy,
            metrics=['accuracy'])
    #也可以写成
    #model.compile(optimizer='adam',
    #        loss='sparse_categorical_crossentropy',
    #        metrics=['accuracy'])
    model.fit(train_images,train_labels,epochs=5,callbacks=[callbacks])
  • 相关阅读:
    centos Cannot allocate memory for the buffer pool
    hive query with field is json
    doubleclick video notes
    shell command
    最简单好用的免费录屏软件
    mysql export query result
    浏览器-前端网络
    vue-main.js中new vue()的解析
    webpack-从零搭建vuecli环境
    【js重学系列】call-apply-bind
  • 原文地址:https://www.cnblogs.com/DLYQY/p/14421910.html
Copyright © 2020-2023  润新知