简体   繁体   English

尝试在 Tensorflow 中组合数字和文本特征:ValueError:层模型需要 2 个输入,但它接收到 1 个输入张量

[英]Attempting to Combine Numeric and Text Features in Tensorflow: ValueError: Layer model expects 2 input(s), but it received 1 input tensors

I am attempting to do a sandbox project using the wine reviews dataset and want to combine both text data as well as some engineered numeric features into the neural network, but I am receiving a value error.我正在尝试使用葡萄酒评论数据集做一个沙盒项目,并希望将文本数据和一些工程数字特征结合到神经网络中,但我收到了一个值错误。

The three sets of features I have are the description (the actual reviews), scaled price, and scaled number of words (length of description).我拥有的三组功能是描述(实际评论)、按比例缩放的价格和按比例缩放的字数(描述长度)。 The y target variable I converted into a dichotomous variable representing good or bad reviews turning it into a classification problem.我将 y 目标变量转换为代表好评或差评的二分变量,将其转化为分类问题。

Whether or not these are the best features to use is not the point, but I am hoping to try to combine NLP with meta or numeric data.这些是否是最好的功能并不是重点,但我希望尝试将 NLP 与元数据或数字数据结合起来。 When I run the code with just the description it works fine, but adding the additional variables is causing a value error.当我仅使用描述运行代码时,它可以正常工作,但是添加其他变量会导致值错误。

y = df['y']
X = df.drop('y', axis=1)

# split up the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

X_train.head();
description_train = X_train['description']
description_test = X_test['description']

#subsetting the numeric variables
numeric_train = X_train[['scaled_price','scaled_num_words']].to_numpy()
numeric_test = X_test[['scaled_price','scaled_num_words']].to_numpy()

MAX_VOCAB_SIZE = 60000
tokenizer = Tokenizer(num_words=MAX_VOCAB_SIZE)
tokenizer.fit_on_texts(description_train)
sequences_train = tokenizer.texts_to_sequences(description_train)
sequences_test = tokenizer.texts_to_sequences(description_test)

word2idx = tokenizer.word_index
V = len(word2idx)
print('Found %s unique tokens.' % V)
Found 31598 unique tokens.

nlp_train = pad_sequences(sequences_train)
print('Shape of data train tensor:', nlp_train.shape)
Shape of data train tensor: (91944, 136)

# get sequence length
T = nlp_train.shape[1]

nlp_test = pad_sequences(sequences_test, maxlen=T)
print('Shape of data test tensor:', nlp_test.shape)
Shape of data test tensor: (45286, 136)

data_train = np.concatenate((nlp_train,numeric_train), axis=1)
data_test = np.concatenate((nlp_test,numeric_test), axis=1)



# Choosing embedding dimensionality
D = 20

# Hidden state dimensionality
M = 40

nlp_input = Input(shape=(T,),name= 'nlp_input')
meta_input = Input(shape=(2,), name='meta_input')
emb = Embedding(V + 1, D)(nlp_input)
emb = Bidirectional(LSTM(64, return_sequences=True))(emb)
emb = Dropout(0.40)(emb)
emb = Bidirectional(LSTM(128))(emb)
nlp_out = Dropout(0.40)(emb)
x = tf.concat([nlp_out, meta_input], 1)
x = Dense(64, activation='swish')(x)
x = Dropout(0.40)(x)
x = Dense(1, activation='sigmoid')(x)

model = Model(inputs=[nlp_input, meta_input], outputs=[x])

#next, create a custom optimizer
optimizer1 = RMSprop(learning_rate=0.0001)

# Compile and fit
model.compile(
  loss='binary_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)


print('Training model...')
r = model.fit(
  data_train,
  y_train,
  epochs=5, 
  validation_data=(data_test, y_test))

I apologize if that was over-kill but wanted to make sure I didn't leave out any relevant clues or information that would potentially be helpful.如果这太过分了,我深表歉意,但我想确保我没有遗漏任何可能有用的相关线索或信息。 The error I get from running the code is我从运行代码中得到的错误是

ValueError: Layer model expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 138) dtype=float32>]

How do I resolve that error?我该如何解决该错误?

Thank you for posting all your code.感谢您发布所有代码。 These two lines are the problem:这两行是问题所在:

data_train = np.concatenate((nlp_train,numeric_train), axis=1)
data_test = np.concatenate((nlp_test,numeric_test), axis=1)

A numpy array is interpreted as one input regardless of its shape. numpy 数组被解释为一个输入,无论其形状如何。 Either use tf.data.Dataset and feed your dataset directly to your model:要么使用tf.data.Dataset并将您的数据集直接提供给您的模型:

train_dataset = tf.data.Dataset.from_tensor_slices((nlp_train, numeric_train))
labels = tf.data.Dataset.from_tensor_slices(y_train)
dataset = tf.data.Dataset.zip((train_dataset, train_dataset))
r = model.fit(dataset, epochs=5)

Or just feed your data directly to model.fit() as a list of inputs:或者只是将您的数据作为输入列表直接提供给model.fit()

r = model.fit(
  [nlp_train, numeric_train],
  y_train,
  epochs=5, 
  validation_data=([nlp_test, numeric_test], y_test))

暂无
暂无

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

相关问题 ValueError:model 层需要 21 个输入,但它接收到 1 个输入张量 - ValueError: Layer model expects 21 input(s), but it received 1 input tensors ValueError:“顺序”层需要 1 个输入,但它收到了 10 个输入张量 - ValueError: Layer "sequential" expects 1 input(s), but it received 10 input tensors ValueError:层顺序需要 1 个输入,但它收到 239 个输入张量 - ValueError: Layer sequential expects 1 input(s), but it received 239 input tensors ValueError:层鉴别器需要 1 个输入,但它收到 2 个输入张量 - ValueError: Layer Discriminator expects 1 input(s), but it received 2 input tensors Tensorflow &amp; Keras 层“顺序”需要 1 个输入,但它接收到 2 个输入张量 - Tensorflow & Keras Layer "sequential" expects 1 input(s), but it received 2 input tensors Python Keras Model -- ValueError: Layer sequential expects 1 input(s), but it received 16 input tensors - Python Keras Model -- ValueError: Layer sequential expects 1 input(s), but it received 16 input tensors 我的输入层需要是什么形状? 我不断收到 ValueError:层“模型”需要 1 个输入,但它收到了 2 个输入张量 - What shape does my Input layer need to be? I keep getting ValueError: Layer "model" expects 1 input(s), but it received 2 input tensors 口罩识别。 错误 - “ValueError:层“model_1”需要 1 个输入,但它接收到 3 个输入张量”,因为帧中出现了多个面 - Mask Recognition. Error - "ValueError: Layer "model_1" expects 1 input(s), but it received 3 input tensors" as more than one face appears in frame 为什么在我拟合模型时代码会生成错误”ValueError:层“sequential_3”需要 1 个输入,但它接收到 2 个输入张量 - why may code generates the error while i fit the model" ValueError: Layer "sequential_3" expects 1 input(s), but it received 2 input tensors ValueError:层顺序需要 1 个输入,但它在 tensorflow 2.0 中收到 211 个输入张量 - ValueError: Layer sequential expects 1 inputs, but it received 211 input tensors in tensorflow 2.0
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM