# 对于文本分类和时间预测等简单任务,小型的一维卷积神经网络可以替代RNN,而且速度快
from keras.datasets import imdb
from keras.preprocessing import sequence
max_features = 10000 # number of words to consider as features
max_len = 500 # cut texts after this number of words (among top max_features most common words)
print('Loading data...')
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
print(len(x_train), 'train sequences')
print(len(x_test), 'test sequences')
print('Pad sequences (samples x time)')
x_train = sequence.pad_sequences(x_train, maxlen=max_len)
x_test = sequence.pad_sequences(x_test, maxlen=max_len)
print('x_train shape:', x_train.shape)
print('x_test shape:', x_test.shape)
from keras.models import Sequential
from keras import layers
from keras.optimizers import RMSprop
model = Sequential()
model.add(layers.Embedding(max_features, 128, input_length=max_len))
# 一维卷积架构和二维卷积相同,是Conv1D层和MaxPooling1D层的叠加
# 最后是一个全局池化层或Flatten层,将三维输出转换为二维输出,让你可以添加一个或多个Dense层(可以有激活函数),用于分类或回归
model.add(layers.Conv1D(32, 7, activation='relu'))
# 一维池化,区别于MaxPooling2D
model.add(layers.MaxPooling1D(5))
model.add(layers.Conv1D(32, 7, activation='relu'))
# 二维卷积model.add(layers.Flatten()),将输入“压平”,即把多维的输入一维化
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(1))
model.summary()
model.compile(optimizer=RMSprop(lr=1e-4),
loss='binary_crossentropy',
metrics=['acc'])
history = model.fit(x_train, y_train,
epochs=10,
batch_size=128,
validation_split=0.2)