繁体   English   中英

UnimplementedError:不支持将字符串转换为浮点数

[英]UnimplementedError: Cast string to float is not supported

我正在尝试在下面运行代码。在我尝试拟合训练数据和 label 之前,一切都很顺利。

我一直在接受以下错误。 我找不到原因。 请你帮助我好吗?

UnimplementedError:不支持将字符串转换为浮点数 [[node metrics/accuracy/Cast (defined at:1) ]] [Op:__inference_distributed_function_53201]

Function 调用栈: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)

绝对你的y_trainy_test arrays 是字符串 arrays。 你可以通过这两行看到

target=targets['YMode'].values.tolist()`

y_train,y_test=target[:cutoff],target[cutoff:]

如果 csv 文件中的数据是数字,您可以像这样将目标数组转换为 int

target = [int(lab) for lab in target]

如果您的数据是分类的,那该怎么办。 您可以通过对数据进行 Label 编码来解决该问题。

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:]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM