Python 深度学习--学习笔记 (二)

编写imdb评价判断神经网络

首先,导入数据

from keras.datasets import imdb

(x_train,y_train),(x_test,y_test) = imdb.load_data(num_words=10000)

num_words=10000 表示:选取评论中前10 000个常用的单词,所以单词索引都不会超过10 000。

现在,让我们查看下数据的大小

print(x_train.shape,y_train.shape)
print(x_test.shape,y_test.shape)

输出:
(25000,) (25000,)
(25000,) (25000,)

可知训练集和测试集都有25000条评论

查看其中的一条评论:

print(x_train[0])

输出的是一个列表,列表里是一长串的1~10000的数字。
可知,每条评论都是一个列表,评论里的单词全都转化为对应 单词的编码 保存。
1
再查看下标签:

print(y_train[0])

输出:1

train_labels 和 test_labels 都是 0 和 1 组成的列表,其中
0代表负面(negative),1 代表正面(positive)。

我们编写的网络的目的是 输出判断评论是正面还是负面的--------故,需要构建二分类模型。

理清思路后,开始构建模型

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(64,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))

由于我们的输出是一个0~1的数据,即为判断正,负面评论的概率,故输出层的激活函数为sigmoid。
sigmoid
输出层经过sigmoid输出后,得到一个大小为0~1数值,即判断正负面评论的概率。

接着定义学习模式

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc']
              )

optimizer(优化器):选择rmsprop
loss(损失函数):二元交叉熵,binary_cross_entropy是二分类的交叉熵,实际是多分类softmax_cross_entropy的一种特殊情况
metrics(评价标准):准确度,分类问题的评价标准一般都为准确度。

接着,我们要处理输入数据
由于输出为 1 个0~1的数,标签为0或1,表达形式一致,则不需要变换表达形式,只需变换格式。

y_train = np.asarray(y_train).astype('float32')
y_test = np.asarray(y_test).astype('float32')

模型无法通过 列表 学习,所以单个传入的数据(input_shape)需要由1个列表改为1个大小为10000的向量,
原数据中的 数字 对应 向量 索引处的 1,其余为0。

现在,我们需要编写一个方法将其转化:

def vectorize_sequences(sequences,dimension=10000):
    results = np.zeros((len(sequences),dimension))
    for i, sequences in enumerate(sequences):
        results[i,sequences] = 1
    return results


x_train = vectorize_sequences(x_train)
x_test = vectorize_sequences(x_test)

这样,每条评论的大小都为 1 个大小为 10 000 的向量。评论逐条累积,最终输出的是一个(25 000,10 000)的numpy数组。

接着,开始训练模型

model.fit(x_train,y_train,epochs=5,batch_size=512)

训练5轮,每次训练传入512个数据(512,10000)

训练好后,用测试组评估模型

results = model.evaluate(x_test,y_test) #[0.3537677825450897, 0.8465]
print(results)

准确度有达到0.8465。

注意,在训练模型时,可能会有Memor Error,需要自行调整训练集的大小,以及batch_size。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值