lut*_*een 2 python nlp keras tensorflow
我正在尝试运行下面的代码。一切都很顺利,直到我尝试适应训练数据和标签。
我一直犯下面的错误。我找不到原因。请你帮助我好吗?
UnimplementedError:不支持将字符串强制转换为浮点数 [[节点指标/精度/强制转换(定义于:1)]] [操作:__inference_distributed_function_53201]
函数调用堆栈:distributed_function
import numpy as np
import pandas as pd
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, GRU, Embedding, CuDNNGRU, Activation
from tensorflow.python.keras.optimizers import Adam
from tensorflow.python.keras.preprocessing.text import Tokenizer
from tensorflow.python.keras.preprocessing.sequence import pad_sequences
import tensorflow as tf
datas=pd.read_csv('data.csv', sep='delimiter', engine='python')
targets=pd.read_csv('label.csv', sep='delimiter', engine='python')
data=datas['XDESCRIPTION'].values.tolist()
target=targets['YMode'].values.tolist()
cutoff=int(len(data)*0.80)
x_train,x_test=data[:cutoff],data[cutoff:]
y_train,y_test=target[:cutoff],target[cutoff:]
tokenizer=Tokenizer()
tokenizer.fit_on_texts(data)
tokenizer.fit_on_texts(target)
x_train_tokens=tokenizer.texts_to_sequences(x_train)
num_tokens=[len(tokens) for tokens in x_train_tokens +x_test_tokens]
num_tokens=np.array(num_tokens)
np.mean(num_tokens)
max_tokens=np.mean(num_tokens)+2*np.std(num_tokens)
max_tokens=int(max_tokens)
max_tokens
np.sum(num_tokens<max_tokens)/len(num_tokens)
x_train_pad=pad_sequences(x_train_tokens, maxlen=max_tokens)
x_test_pad=pad_sequences(x_test_tokens, maxlen=max_tokens)
idx=tokenizer.word_index
inverse_map=dict(zip(idx.values(),idx.keys()))
def tokens_to_string(tokens):
words=[inverse_map[token] for token in tokens if token!=0]
text=" ".join(words)
return text
model=Sequential()
embedding_size=41
model.add(Embedding(input_dim=num_words,output_dim=embedding_size,input_length=max_tokens))
model.add(GRU(units=16,return_sequences=True))
model.add(GRU(units=8,return_sequences=True))
model.add(GRU(units=4))
model.add(Dense(1,activation="sigmoid"))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x=np.array(x_train_pad), y=np.array(y_train),epochs=2,batch_size=256)
Run Code Online (Sandbox Code Playgroud)
小智 5
当然,您的y_train和y_test数组都是字符串数组。通过这两行你可以看到
target=targets['YMode'].values.tolist()`
y_train,y_test=target[:cutoff],target[cutoff:]
Run Code Online (Sandbox Code Playgroud)
如果 csv 文件中的数据是数字,则可以将目标数组转换为 int,如下所示
target = [int(lab) for lab in target]
Run Code Online (Sandbox Code Playgroud)
但是,如果您的数据是分类的,您可以通过对数据进行标签编码来解决该问题。
from sklearn.preprocessing import LabelEncoder
target=targets['YMode'].values.tolist()
label_encoder = LabelEncoder()
Y = np.array(label_encoder.fit_transform(target))
y_train,y_test=Y[:cutoff],Y[cutoff:]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11016 次 |
| 最近记录: |