实例:通过imdb的评价数据来分析电影的好坏。
套路:
1. 预处理数据
2. 建立网络模型(层数、每层节点数、激活函数)
3. 选取损失函数、优化器,训练轮次及批量大小
4. 使用训练集训练模型
5. 根据训练结果调整2、3
6. 使用校验集校验模型
7. 根据校验结果调整2、3
8. 使用测试集预测结果
9. 根据测试结果调整2、3
10. 最终获得满意的模型:)
最终的代码很简单,技术红利时代,造就了技术人员的层次天壤之别。
加载数据
from keras.datasets import imdb # imdb 电影评论数据库,样本是评论中单词对应的索引 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
讯享网
预处理数据,主要是把训练及测试数据从出现单词的编码向量,转化为单词是否出现的0/1向量
比如有条评价是:good movie 对应词典中的索引是93, 103,那么最初的向量是[93,103] 这样的向量会根据评价的内容长度不同,不能满足深度学习网络输入数据的需要。一种转变方式就是,用10000个高频单词是否出现来表示,good movie就可以转变为[0,0,0...1,0,0...,1,0,0...]第93和103是1,其他9998个元素都是0
讯享网import numpy as np def vectorize_sequences(sequences, dimension=10000): # Create an all-zero matrix of shape (len(sequences), dimension) results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. # set specific indices of results[i] to 1 return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) y_train = np.asarray(train_labels).astype('float32') y_test = np.asarray(test_labels).astype('float32')
预处理过的数据就可以送入网络中进行学习了。先构建网络模型:1个输入、1个隐藏、1个输出,输入和隐藏层都是16个元素
隐藏层数和元素个数搜视『凭经验』选择的,根据训练结果==不断优化。激活函数是RELU(Rectified Linear Unit,修正线性单元)是最常用的激活函数。最后输出层采用sigmodid,将输出转化为0-1之间的数值,表示概率值。
from keras import models from keras import layers 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')
接下来选择损失函数和优化器,并选择评估标准。这里可以选择karas自带的,也可以自定义优化器和损失函数。
讯享网model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
训练及验证模型,这里训练4轮次,批量大小为512个样本
history = model.fit(partial_x_train, partial_y_train, epochs=4, batch_size=512, validation_data=(x_val, y_val))
单独验证
讯享网results = model.evaluate(x_test, y_test)
预测
model.predict(x_test)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/122617.html