【问题标题】:UnimplementedError: Cast string to float is not supportedUnimplementedError:不支持将字符串转换为浮点数
【发布时间】:2020-08-11 09:49:10
【问题描述】:

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

我一直在犯以下错误。我找不到原因。你能帮帮我吗?

UnimplementedError: 不支持将字符串转换为浮点数 [[node 指标/准确性/演员(定义于: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)

【问题讨论】:

  • 你在做任何字符串来浮动转换吗?
  • 可能你的 y_train 和 y_test 是字符串,那么你应该把它转换成数字
  • 您能发布data.csvlabel.csv 的样本吗?

标签: python tensorflow keras nlp


【解决方案1】:

您的y_trainy_test 数组肯定是字符串数组。这两行就可以看出来了

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

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

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

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

但是,如果您的数据是分类数据,您可以通过对数据进行标签编码来解决该问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2017-03-04
    • 2019-03-02
    • 2011-11-25
    • 2022-06-28
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多