• Python深度学习笔记03--使用Kears进行二分类


     1 import keras
     2 from keras.datasets import imdb
     3 import numpy as np
     4 from keras import models
     5 from keras import layers
     6 import matplotlib.pyplot as plt
     7 
     8 #1. 获取数据集
     9 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
    10 
    11 # print(train_data.shape) # (25000,)
    12 
    13 # 将整数序列编码为二进制矩阵
    14 def vectorize_sequences(sequences, dimension=10000):
    15     results = np.zeros((len(sequences), dimension))
    16     for i, sequence in enumerate(sequences):
    17         results[i, sequence] = 1.
    18     return results
    19 
    20 #2. 数据处理
    21 x_train = vectorize_sequences(train_data)
    22 x_test = vectorize_sequences(test_data)
    23 
    24 y_train = np.asarray(train_labels).astype('float32')
    25 y_test = np.asarray(test_labels).astype('float32')
    26 
    27 # y_train = np.asarray(train_labels,dtype='float32')
    28 # y_test = np.asarray(test_labels,dtype='float32')
    29 
    30 #3. 建立网络模型
    31 model = models.Sequential()
    32 model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
    33 model.add(layers.Dense(16,activation='relu'))
    34 model.add(layers.Dense(1,activation='sigmoid'))
    35 
    36 #4. 设置编译三参数
    37 model.compile(optimizer='rmsprop',
    38 loss='binary_crossentropy',metrics=['accuracy'])
    39 
    40 x_val = x_train[:10000]
    41 partial_x_train = x_train[10000:]
    42 
    43 y_val = y_train[:10000]
    44 partial_y_train = y_train[10000:]
    45 
    46 #5. 使用验证集确定epochs等超参数
    47 history = model.fit(partial_x_train,partial_y_train,epochs=4,batch_size=512,validation_data=(x_val,y_val))
    48 
    49 history_dict = history.history
    50 #print(history_dict.keys())
    51 # #dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])
    52 
    53 
    54 # #验证损失与迭代轮数的关系
    55 # loss_values = history_dict['loss']
    56 # val_loss_values = history_dict['val_loss']
    57 
    58 # epochs = range(1,len(loss_values) + 1)
    59 
    60 # plt.plot(epochs,loss_values,'bo',label='Training loss')
    61 # plt.plot(epochs,val_loss_values,'b',label='Validation loss')
    62 # plt.title('Training and validation loss')
    63 # plt.xlabel('Epochs')
    64 # plt.ylabel('Loss')
    65 # plt.legend()
    66 
    67 # plt.show()
    68 
    69 
    70 # #验证精度与迭代轮数的关系
    71 # plt.clf()   # clear figure
    72 # acc = history_dict['accuracy']
    73 # val_acc = history_dict['val_accuracy']
    74 
    75 # plt.plot(epochs, acc, 'bo', label='Training acc')
    76 # plt.plot(epochs, val_acc, 'b', label='Validation acc')
    77 # plt.title('Training and validation accuracy')
    78 # plt.xlabel('Epochs')
    79 # plt.ylabel('Loss')
    80 # plt.legend()
    81 
    82 # plt.show()
    83 
    84 #6. 评估模型
    85 results = model.evaluate(x_test, y_test)
    86 print(results)
    87 
    88 #7. 进行预测
    89 model.predict(x_test)

    小结:

    (1)通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序列可以编码为二进制向量,但也有其他编码方式。

    (2)带有 relu 激活的 Dense 层堆叠,可以解决很多种问题(包括情感分类),你可能会经常用到这种模型。

    (3)对于二分类问题(两个输出类别),网络的最后一层应该是只有一个单元并使用 sigmoid激活的 Dense 层,网络输出应该是 0~1 范围内的标量,表示概率值。

    (4)对于二分类问题的 sigmoid 标量输出,你应该使用 binary_crossentropy 损失函数。

    (5)无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。这一点你无须担心。

    (6)随着神经网络在训练数据上的表现越来越好,模型最终会过拟合,并在前所未见的数据上得到越来越差的结果。一定要一直监控模型在训练集之外的数据上的性能。

  • 相关阅读:
    Canvas鼠标点击特效(富强、民主...)、收藏
    mysql实现当前行的值累加上一行的值
    HTML生成横向的PDF
    Java iText+FreeMarker生成PDF(HTML转PDF)
    HTML图片点击放大---关闭
    HTML页面通过JS跨域调用,子传父
    查询结果中出现行号(适用于按名次排序)
    在Nginx和Apache服务器配置https
    Rinetd 端口转发工具
    lsyncd使用中遇到的问题
  • 原文地址:https://www.cnblogs.com/asenyang/p/14315033.html
Copyright © 2020-2023  润新知