# 1.按照要求使用keras,搭建rnn处理以下内容 # (1)数据预处理 import tensorflow as tf from tensorflow.keras import optimizers,activations,losses,layers,models sample = "hihello" # ①将出现的单词按照字典形式进行处理 set_list = list(set(sample)) print(set_list) set_dict = {j:i for i,j in enumerate(set_list)} print(set_dict) # ②使用上面的sample,将hihell作为特征,ihello作为标签 x_str = sample[:-1] y_str = sample[1:] x = [set_dict[i] for i in x_str] y = [set_dict[i] for i in y_str] # ③设置合理的时间序列,将x进行对应的处理 n_timesteps = len(x) n_classes = len(set_list) x = tf.keras.utils.to_categorical(x,n_classes) x = tf.reshape(x,(-1,n_timesteps,n_classes)) y = tf.keras.utils.to_categorical(y,n_classes) y = tf.reshape(y,(-1,n_timesteps,n_classes)) # (2)模型操作 # ①使用LSTM模型进行处理 model = tf.keras.models.Sequential() model.add(tf.keras.layers.LSTM(n_classes,input_shape=(n_timesteps,n_classes),return_sequences=True)) # ②叠加一层lstm模型,元素数量相同 model.add(tf.keras.layers.LSTM(n_classes,return_sequences=True)) # ③使用对应方式将数据进行softmax处理 model.add(tf.keras.layers.Activation('softmax')) # ④合理编译模型 model.compile(optimizer=optimizers.Adam(0.1), loss = losses.categorical_crossentropy, metrics=['accuracy']) # ⑤训练模型 model.fit(x,y,epochs=100) # ⑥预测结果 predictions = model.predict(x) # ⑦将预测结果进行打印,核对结果 for i , j in enumerate(predictions): pre_idx = tf.argmax(j,axis=1) pre_val = [set_list[c] for c in pre_idx] print('true_val',''.join(y_str),'-->','pre_val',''.join(pre_val))