<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 感情 (肯定/否定) のラベル付けをされた，25,000のIMDB映画レビューのデータセット．レビューは前処理済みで，各レビューは単語のインデックス（整数）のシーケンスとしてエンコードされています．便宜上，単語はデータセットにおいての出現頻度によってインデックスされています．そのため例えば，整数"3"はデータの中で3番目に頻度が多い単語にエンコードされます．これによって"上位20個の頻出語を除いた，上位10,000個の頻出語についてのみ考える"というようなフィルタリング作業を高速に行うことができます． 慣例として，"0"は特定の単語を表さずに，未知語にエンコードされます．
Step1:  25000文章
各文章は単語列のlistからなると
Step2:  maxlenより長いシーケンスは切り捨てられる
maxlenより短いシーケンスは前半部分が0パディングされる
Step3:  Conv1Dの実装確認
<ASSISTANT_TASK:>
Python Code:
print('Loading data...')
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
Explanation: 感情 (肯定/否定) のラベル付けをされた，25,000のIMDB映画レビューのデータセット．レビューは前処理済みで，各レビューは単語のインデックス（整数）のシーケンスとしてエンコードされています．便宜上，単語はデータセットにおいての出現頻度によってインデックスされています．そのため例えば，整数"3"はデータの中で3番目に頻度が多い単語にエンコードされます．これによって"上位20個の頻出語を除いた，上位10,000個の頻出語についてのみ考える"というようなフィルタリング作業を高速に行うことができます． 慣例として，"0"は特定の単語を表さずに，未知語にエンコードされます．
End of explanation
print(len(x_train), 'train sequences')
print(len(x_test), 'test sequences')
# 最大の単語数は2494
lens = []
for i in range(25000):
    lens.append(len(x_train[i]))
print(max(lens))
print('Pad sequences (sample x time)')
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
print('x_train shape:', x_train.shape)
print('x_test shape:', x_test.shape)
Explanation: 25000文章
各文章は単語列のlistからなると
End of explanation
x_train[0]
print('Build model...')
model = Sequential()
# 単語IDを密ベクトルに変換する層
# Embedding(input_dim, output_dim, input_length)
# input_dim : 語彙数 = 5000
# output_dim: 密ベクトルの次元数 = 50
# input_length: 入力の系列長 = 400
model.add(Embedding(max_features, embedding_dims, input_length=maxlen))
model.add(Dropout(0.2))
model.add(Conv1D(filters, kernel_size, padding='valid', activation='relu', strides=1))
# 各フィルタごとに最大値を出力する
model.add(GlobalMaxPool1D())
model.add(Dense(hidden_dims))
model.add(Dropout(0.2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_test, y_test))
Explanation: maxlenより長いシーケンスは切り捨てられる
maxlenより短いシーケンスは前半部分が0パディングされる
End of explanation
import numpy as np
from keras.layers import Input
from keras.models import Model
inputs = Input(shape=(10, 4))
inputs
c1 = Conv1D(2, 3, padding='valid', activation='linear', strides=1)
y = c1(inputs)
y
model = Model(inputs=inputs, outputs=y)
model.summary()
model.predict(x)
model.layers[1].get_weights()[0].shape
w = model.layers[1].get_weights()[0]
x[0][:3]
# model.predict(x)の1行目と一致する
print(x[0][:3].shape)
print(w.shape)
print(np.sum(x[0][:3] * w[:, :, 0]))
print(np.sum(x[0][:3] * w[:, :, 1]))
# xは1つずらす（strides=1）
# model.predict(x)の2行目と一致する
print(np.sum(x[0][1:4] * w[:, :, 0]))
print(np.sum(x[0][1:4] * w[:, :, 1]))
Explanation: Conv1Dの実装確認
End of explanation
<END_TASK>