首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用tensorflow为下面的模型构建嵌入层?

如何使用tensorflow为下面的模型构建嵌入层?
EN

Stack Overflow用户
提问于 2018-10-02 19:11:48
回答 1查看 498关注 0票数 2

这是一个用于情感分析的keras模型,我需要把它转换成tensorflow,我不能用tensorflow构建嵌入层,并且使用混淆矩阵来评估这个模型。我问tf-学习是否和tensorflow一样

代码语言:javascript
复制
import os     
import numpy as np  
import pandas as pd  
import tensorflow as tf  
from tensorflow import set_random_seed
set_random_seed(2)
from nltk.tokenize import word_tokenize
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import Tokenizer
from sklearn.preprocessing import  LabelEncoder
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers.embeddings import Embedding
from keras.layers import Flatten
from keras.layers import Conv1D, MaxPooling1D
from keras.layers import Dense,Activation
from keras.layers import Dropout
from keras.callbacks import TensorBoard, ModelCheckpoint
import re
import string
import collections
import time
seed = 10

读取CSV文件

代码语言:javascript
复制
df=pd.read_csv('tweets-pos-neg.csv', usecols = ['text','airline_sentiment'])
df = df.reindex(['text','airline_sentiment'], axis=1) #reorder columns
df=df.apply(lambda x: x.astype(str).str.lower()) 

规范化文本

代码语言:javascript
复制
def normalize(text):
    text= re.sub(r"http\S+", r'', text) 
    text= re.sub(r"@\S+", r'', text)
    punctuation = re.compile(r'[!"#$%&()*+,-./:;<=>?@[\]^_`{|}~|0-9]')
    text = re.sub(punctuation, ' ', text)
    text= re.sub(r'(.)\1\1+', r'\1', text) 
    return text

清理文本

代码语言:javascript
复制
def prepareDataSets(df):
     sentences=[]
     for index, r in df.iterrows():
         text= normalize(r['text'])
         sentences.append([text,r['airline_sentiment']])
          df_sentences=pd.DataFrame(sentences,columns= 
          ['text','airline_sentiment'])
     return df_sentences
edit_df=prepareDataSets(df)
edit_df=shuffle(edit_df)
X=edit_df.iloc[:,0]
Y=edit_df.iloc[:,1]

将评论拆分为令牌

代码语言:javascript
复制
 max_features = 50000
 tokenizer = Tokenizer(num_words=max_features, split=' ')
 tokenizer.fit_on_texts(X.values)
 #convert review tokens to integers
 X_seq = tokenizer.texts_to_sequences(X)

填充序列,根据的最大评论长度,使所有向量具有相同的大小。

代码语言:javascript
复制
seq_len=35
X_pad = pad_sequences(X_seq,maxlen=seq_len)   

将目标值从字符串转换为整数

代码语言:javascript
复制
le=LabelEncoder()
Y_le=le.fit_transform(Y)
Y_le_oh=to_categorical(Y_le)

Train-Test-Split

代码语言:javascript
复制
X_train, X_test, Y_train, Y_test = train_test_split(X_pad,Y_le_oh, test_size 
= 0.33, random_state = 42)
X_train, X_Val, Y_train, Y_Val = train_test_split(X_train,Y_train, test_size 
= 0.1, random_state = 42)
print(X_train.shape,Y_train.shape)
print(X_test.shape,Y_test.shape)
print(X_Val.shape,Y_Val.shape) 

创建模型

代码语言:javascript
复制
embedding_vecor_length = 32    #no of vector columns
model_cnn = Sequential()
model_cnn.add(Embedding(max_features, embedding_vecor_length, 
input_length=seq_len))
model_cnn.add(Conv1D(filters=100, kernel_size=2, padding='valid', 
activation='relu', strides=1))
model_cnn.add(MaxPooling1D(2))
model_cnn.add(Flatten())
model_cnn.add(Dense(256, activation='relu'))
model_cnn.add(Dense(2, activation='softmax'))
opt=tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)
model_cnn.compile(loss='binary_crossentropy', optimizer=opt, metrics= 
['accuracy'])
print(model_cnn.summary())  

评价模型

代码语言:javascript
复制
history=model_cnn.fit(X_train, Y_train, epochs=3, batch_size=32, callbacks=[tensorboard], validation_data=(X_Val, Y_Val))
scores = model_cnn.evaluate(X_test, Y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[-1]*100))
EN

回答 1

Stack Overflow用户

发布于 2018-10-02 19:18:19

如果您只需要使用Tensorflow API来训练/评估,您可以使用model_to_estimator函数构建一个估计器。

下面是一个例子的文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52614936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档