zoukankan      html  css  js  c++  java
  • 寒假学习日报(九)

      今天算是摸鱼了,代码方面学的不多,倒是温习了一遍日语,因为我对这方面感兴趣。。。。下面进入正题,今天只是简单尝试了一下tensorflow中函数式api的使用,其实用它写运行代码跟之前测试代码运行出来的效果是差不多的,因为语句都是一个意思,不过用函数式api写的话个人感觉更好理解一些,而且可以做一些其他操作。

      首先看一下如何使用函数式api来实现建立模型并编译,数据集依然是老朋友fashion MNIST:

    import tensorflow as tf
    from tensorflow import keras
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    fashion_mnist = keras.datasets.fashion_mnist
    
    (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
    
    #归一化
    train_images = train_images / 255.0
    test_images = test_images / 255.0
    #建立输入
    input = keras.Input(shape=(28, 28))
    #函数调用
    x = keras.layers.Flatten()(input)
    x = keras.layers.Dense(32, activation='relu')(x)
    x = keras.layers.Dropout(0.5)(x)
    x = keras.layers.Dense(64, activation='relu')(x)
    #设置输出
    output = keras.layers.Dense(10, activation='softmax')(x)
    #建立模型
    model = keras.Model(inputs=input, outputs=output)
    model.summary()

     可以看到在函数式api中需要自己手动创建输入和输出对象,从注释“函数调用”之后就是之前测试代码过程中的模型创建过程,只不过以前写的时候相当于简写,直接在Sequential内就将Dense,Dropout等参数设置好了,在这里我们添加输入对象建立的是Flatten,红箭头标明的None是因为在设置input时shape里没有特别指定,默认为None。

     继续:

    #编译
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
    history = model.fit(train_images,train_labels,epochs=30,validation_data=(test_images,test_labels))

    test_loss, test_acc = model.evaluate(test_images, test_labels)
    plt.plot(history.epoch, history.history['loss'],'r',label='loss')
    plt.plot(history.epoch, history.history['val_loss'],'b--',label='val_loss')
    plt.legend()

     事实上看过函数式api的代码都感觉很熟悉,前几天测试时没少建立模型,大体上都是这样的构造。如果说函数式api只有这样的话,哪里还用单拎出来呢,所以它还有不同的地方。

      我们可以设置两个输入对象,利用函数式api来进行两个图片是否一致的判断:

      前面调用什么的都是一样的,包括数据集,因此直接从不一样的地方开始贴,也就是建立input对象的时候:

    #建立输入1
    input1 = keras.Input(shape=(28, 28))
    #建立输入2
    input2 = keras.Input(shape=(28, 28))
    #函数调用
    x1 = keras.layers.Flatten()(input1)
    x2 = keras.layers.Flatten()(input2)
    #将这两个对象合并成一个,进行对两个图片是否一样的判断(逻辑回归)
    x = keras.layers.concatenate([x1, x2])
    x = keras.layers.Dense(32, activation='relu')(x)
    #设置输出,注意激活函数使用的是sigmoid
    output = keras.layers.Dense(1, activation='sigmoid')(x)
    #建立模型,注意设置了两个input对象,因此inputs使用数组形式
    model = keras.Model(inputs=[input1, input2], outputs=output)
    model.summary()

       可以看到这个新的模型出现了分歧,这也是函数式api的一个应用。

      以上就是今天学习的tensorflow相关内容,今天摸鱼了不少时间,就当给自己放了个假= =。

  • 相关阅读:
    1052 Linked List Sorting (25 分)
    1051 Pop Sequence (25 分)
    1050 String Subtraction (20 分)
    1049 Counting Ones (30 分)
    1048 Find Coins (25 分)
    1047 Student List for Course (25 分)
    1046 Shortest Distance (20 分)
    1045 Favorite Color Stripe (30 分)
    1044 Shopping in Mars (25 分)
    1055 The World's Richest (25 分)
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/14294929.html
Copyright © 2011-2022 走看看