我正在嘗試使用 Bert 預訓練模型構建文本分類模型,但是當我嘗試擬合模型時,我不斷收到錯誤訊息。
錯誤說
ValueError: Layer "model_1" expects 2 inputs but it received only 1 input tensor.
Inputs received: \[\<tf.Tensor 'IteratorGetNext:0' shape=(None, 309) dtype=int32\>\]
我也在使用 TensorFlow 和其他 Python 庫。
這是我的代碼:
import numpy as np
from data_helpers import load_data
from keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras.layers import Embedding
from sklearn.model_selection import train_test_split
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
from keras.layers import Dropout,Flatten
from sklearn.metrics import classification_report
from transformers import TFBertModel
import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_text as text
from tensorflow.keras.layers import Embedding
# Data Preparation
print("Load data...")
x, y, vocabulary, vocabulary_inv = load_data()
np.save('data1-vocab.npy', vocabulary)
sequence_length = x.shape[1]
X_train, X_test, y_train, y_test = train_test_split( x, y, test_size=0.2, random_state=42)
bert_model = TFBertModel.from_pretrained('bert-base-uncased')
def create_model(bert_model, max_len=sequence_length):
##params###
opt = tf.keras.optimizers.Adam(learning_rate=1e-5, decay=1e-7)
loss = tf.keras.losses.CategoricalCrossentropy()
accuracy = tf.keras.metrics.CategoricalAccuracy()
input_ids = tf.keras.Input(shape=(max_len,),dtype='int32')
attention_masks = tf.keras.Input(shape=(max_len,),dtype='int32')
embeddings = bert_model([input_ids,attention_masks])[1]
output = tf.keras.layers.Dense(3, activation="softmax")(embeddings)
model = tf.keras.models.Model(inputs = [input_ids,attention_masks], outputs = output)
model.compile(opt, loss=loss, metrics=accuracy)
return model
model = create_model(bert_model,sequence_length)
model.summary()
model.fit(X_train, y_train, epochs=32, batch_size=32,verbose=1)
我更改了 .fit() 函式的引數,但沒有任何效果
uj5u.com熱心網友回復:
很明顯,您的代碼是:
model = tf.keras.models.Model(inputs = [input_ids,attention_masks], outputs = output)
因此,這里的輸入需要 2 個輸入(input_ids和attention_masks),但在fit函式中,您只需將 1 個輸入傳遞給模型:
model.fit(X_train, y_train, epochs=32, batch_size=32,verbose=1)
因此,在修復該錯誤之前,您應該了解有關該模型的更多資訊。我的意思是你需要知道你的模型期望什么以及模型的輸入或輸出結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/522946.html
