• 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:实现分析电影评论正负能量


    from keras.datasets import imdb
    #num_words表示加载影评时,确保影评里面的单词使用频率保持在前1万位,于是有些很少见的生僻词在数据加载时会舍弃掉
    (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
    print(train_data[0])
    print(train_labels[0])

    #频率与单词的对应关系存储在哈希表word_index中,它的key对应的是单词,value对应的是单词的频率
    word_index = imdb.get_word_index()
    #我们要把表中的对应关系反转一下,变成key是频率,value是单词
    reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
    '''
    在train_data所包含的数值中,数值1,2,3对应的不是单词,而用来表示特殊含义,1表示“填充”,2表示”文本起始“,
    3表示”未知“,因此当我们从train_data中读到的数值是1,2,3时,我们要忽略它,从4开始才对应单词,如果数值是4,
    那么它表示频率出现最高的单词
    '''
    text = ""
    for wordCount in train_data[0]:
        if wordCount > 3:
            text += reverse_word_index.get(wordCount - 3)
            text += " "
        else:
            text += "?"
    
    print(text)

    import numpy as np
    def oneHotVectorizeText(allText, dimension=10000):
        '''
        allText是所有文本集合,每条文本对应一个含有10000个元素的一维向量,假设文本总共有X条,那么
        该函数会产生X条维度为一万的向量,于是形成一个含有X行10000列的二维矩阵
        '''
        oneHotMatrix = np.zeros((len(allText), dimension))
        for i, wordFrequence in enumerate(allText):
            oneHotMatrix[i, wordFrequence] = 1.0
        return oneHotMatrix
    
    x_train = oneHotVectorizeText(train_data)
    x_test =  oneHotVectorizeText(test_data)
    
    print(x_train[0])
    
    y_train = np.asarray(train_labels).astype('float32')
    y_test = np.asarray(test_labels).astype('float32')

    from keras import models
    from keras import layers
    
    model = models.Sequential()
    #构建第一层和第二层网络,第一层有10000个节点,第二层有16个节点
    #Dense的意思是,第一层每个节点都与第二层的所有节点相连接
    #relu 对应的函数是relu(x) = max(0, x)
    model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
    #第三层有16个神经元,第二层每个节点与第三层每个节点都相互连接
    model.add(layers.Dense(16, activation='relu'))
    #第四层只有一个节点,输出一个0-1之间的概率值
    model.add(layers.Dense(1, activation='sigmoid'))
    import matplotlib.pyplot as plt
    x = np.linspace(-10, 10)
    y_relu = np.array([0*item if item < 0 else item for item in x])
    plt.figure()
    plt.plot(x, y_relu, label='ReLu')
    plt.legend()

    from keras import losses
    from keras import metrics
    from keras import optimizers
    
    model.compile(optimizer=optimizers.RMSprop(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])
    x_val = x_train[:10000]
    partial_x_train = x_train[10000:]
    
    y_val = y_train[: 10000]
    partial_y_train = y_train[10000:]
    
    history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, 
                        validation_data = (x_val, y_val))

    train_result = history.history
    print(train_result.keys())

    import matplotlib.pyplot as plt
    
    acc = train_result['acc']
    val_acc = train_result['val_acc']
    loss = train_result['loss']
    val_loss = train_result['val_loss']
    
    epochs = range(1, len(acc) + 1)
    #绘制训练数据识别准确度曲线
    plt.plot(epochs, loss, 'bo', label='Trainning loss')
    #绘制校验数据识别的准确度曲线
    plt.plot(epochs, val_loss, 'b', label='Validation loss')
    plt.title('Trainning and validation loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    plt.show()

    model = models.Sequential()
    model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
    model.add(layers.Dense(16, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))
    
    model.compile(optimizer='rmsprop',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    
    history = model.fit(x_train, y_train, epochs=4, batch_size=512)
    results = model.evaluate(x_test, y_test)
    print(results)

    model.predict(x_test)

  • 相关阅读:
    php高级进阶系列文章--第二篇(PHP基础知识复习)
    开发常用linux命令
    composer 包管理工具学习总结
    微信菜单加emoji图标
    onethink导出excel
    onethinkp导入excel
    导航效果css
    php发送邮件
    js初学者的div移动
    html图片预览
  • 原文地址:https://www.cnblogs.com/tszr/p/12232588.html
Copyright © 2020-2023  润新知