电影情感分类

8 篇文章 0 订阅
8 篇文章 0 订阅
from keras.datasets import imdb
from keras import models
from keras import layers
import numpy as np
from sys import path
#path.append('D:\\File\\Study\\MachineLearning\\Python深度学习\\test\\vs2017\\PythonConsole\\Common\\')
path.append('./Common/')
#临时导入路径,永久导入可专门写.py去导入到Lib/site-package 下
import typeOf
(train_data,train_labels),(test_data,test_lables)=imdb.load_data(num_words=10000)
#最多保留10000个常用单词
print("维度:",np.ndim(np.array([1,2,3])))

print ('下载完成')
print('数据为:',train_data)
print('训练数据形状',train_data.shape)
print('训练数据维度',np.ndim(train_data.shape))
print('训练结果形状',train_labels.shape)
print('第一条评论对应的单词索引:', train_data[0])
print('第一条评论对应的单词索引的第一个单词:', train_data[0][0])
print('正面负面:',train_labels[0])
print('训练结果:',train_labels)
print('训练结果:',len(train_labels))
#创造一个1-10000的数组
#print([max(sequence) for sequence in train_data])
#print(max(sequence) for sequence in train_data)
#生成一个表达式,如果整个表达式放在[]中运行,就是循环生成[]中的内容,但是for开头的
#循环是代码块不能运行在单个方法里。如:print([for sequence in train_data])是错的
print('最多:',max([max(sequence) for sequence in train_data]),'个')
word_index=imdb.get_word_index()
#下载单词对应的数字索引,格式为Json就是data/imdb_word_index.json
print('word_index类型为:',typeOf.getType(word_index))
reverse_word_index=dict(
    [(value,key) for (key,value) in word_index.items()]
    )
#反转字典
decode_reviw=''.join([reverse_word_index.get(i-3,'?') for i in train_data[0]])
#取出第一条的单词索引,去反转字典中找到i-3的值,找不到就返回?
#将评论解码。注意,索引减去了3,因为0、1、2
#是为“padding”(填充)、“start of sequence”(序
#列开始)、“unknown”(未知词)分别保留的索引
import _3_4_2独热编码 as oneHot
#将训练数据独热编码,也叫向量化
#不要太在乎imdb里的数据格式,实践当中这些数据的结构靠自己组织
x_train=oneHot.vectorize_sequence(train_data)
x_test=oneHot.vectorize_sequence(test_data)#将训练结果数据独热编码,俗称向量化
print('独热编码后的训练数据形状:',x_train.shape)
print('独热编码后的训练数据形状:',np.shape( x_train))
print('独热编码后的训练数据维度:', np.ndim(x_train))
print('独热编码后的训练数据第二个原来是14现在是:', x_train[0][1])
#print('独热编码后的测试数据形状:',x_test.shape)
print('独热编码前训练结果形状:',np.shape(train_labels),'维度',np.ndim(train_labels))
y_train=np.asarray(train_labels).astype('float32')
print('独热编码后训练结果形状:',y_train,'但是数字都是1了')
#####################原始模型#########################################################
#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'))
##################4.4.1章节对应的更小的模型实验###############
#model=models.Sequential()
#model.add(layers.Dense(4,activation='relu',input_shape=(10000,)))
#model.add(layers.Dense(4,activation='relu'))
#model.add( layers.Dense(1,activation='sigmoid'))
##################4.4.2权重正则化####################
from keras import regularizers
model = models.Sequential()
#权重正则化regularizer正则化
model.add(layers.Dense(16,kernel_regularizer=regularizers.l2(0.001),
                      activation='relu',input_shape=(10000,)))
#在层的参数中指定权重正则化实例,指定每层的权重规则。
model.add(layers.Dense(16,kernel_regularizer=regularizers.l2(0.001),
                       activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
###############4.4.3dropout数据流失正则化#################
#model=models.Sequential();
#model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
#model.add(layers.Dropout(0.5))
#model.add(layers.Dense(16,activation='relu'))
#model.add(layers.Dropout(0.5))
#model.add( layers.Dense(1,activation='sigmoid'))

######################################################################################
#model.compile(optimizer='rmsprop',
#              loss='binary_crossentropy',
#              metrics=['accuracy']
#              )
#和上面只是写法不同
from keras import optimizers,losses,metrics
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss=losses.binary_crossentropy,
              metrics=[metrics.binary_accuracy]
              )
#保留验证集合
x_val=x_train[:10000]#0-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=4,batch_size=512,#3.4.4章节中说的,防止过拟合只训练4次。
                  validation_data=(x_val,y_val))
####################################################
##图表显示训练效果
print(history.history)#
import matplotlib.pyplot as plt
#plot是图标对象
history_dict=history.history;
print(history_dict.keys())
loss_values=history_dict['loss']# 损失值
val_loss_values=history_dict['val_loss']#验证损失值

epochs=range(1,len(loss_values)+1)#得到一个值,1-损失值的length+1=[1-21]
print('epchos是:',epochs)
plt.plot(epochs,loss_values,'bo',label='Training loss')
plt.plot(epochs,val_loss_values,'b',label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()#绘制图
plt.show();

#plt.clf();#清空图像
#acc=history_dict['binary_accuracy']
#val_acc=history_dict['val_binary_accuracy']

#plt.plot(epochs,acc,'bo',label='Training acc')
#plt.plot(epochs,val_acc,'b',label='Validation acc')
#plt.title('Training and validation accuray')
#plt.xlabel('Epchos')
#plt.ylabel('Accuracy')
#plt.legend()
#plt.show();
#######################################################

print('预测的结果:',model.predict(x_test))#predict预测并显示








 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值