我正在尝试基于烂番茄数据集进行情感分析分类器的开发。我遇到了这个错误:
AttributeError: ‘RNN’ 对象没有属性 ‘_output_tensor_cache’
遗憾的是,到处都找不到帮助。我甚至不知道该从哪里开始查找。
import pandas as pdfrom sklearn.model_selection import train_test_splitfrom tensorflow import kerasfrom keras import Modelfrom tensorflow.keras.layers import LSTM, Embedding, Denseimport osos.chdir('/home/nicolas/Documents/datasets')df = pd.read_csv('rotten_tomatoes_reviews.csv', nrows=50_000)df = df.loc[df.Review.str.len() >= 3]array = df.Review.valuestarget = df.Freshness.valuestokenizer = keras.preprocessing.text.Tokenizer(num_words=3_000)tokenizer.fit_on_texts(array)vector = tokenizer.texts_to_sequences(array)padded = keras.preprocessing.sequence.pad_sequences(vector, maxlen=40)X_train, X_test, y_train, y_test = train_test_split(padded, target, test_size=2e-1)class RNN(Model): def __init__(self): super(RNN, self).__init__() self.rnn1 = LSTM(8, return_sequences=True, return_state=True) self.rnn2 = LSTM(8) self.emb1 = Embedding(input_dim=3_000, output_dim=50, input_length=40) self.flc1 = Dense(2) def __call__(self, inputs, training=None, mask=None): x = self.emb1(inputs) x = self.rnn1(x) x = self.rnn2(x) out = self.flc1(x) print(out.shape) return outdef main(): model = RNN() model.compile(optimizer=keras.optimizers.Adam(0.001), loss=keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy']) model.fit(X_train, y_train, batch_size=16, epochs=10, validation_data=[X_test, y_test], verbose=1) scores = model.evaluate(X_test, y_test, batch_size=16, verbose=1) print("最终测试损失和准确率:", scores)if __name__ == '__main__': main()
回答:
这是因为你混合了原生 Keras 实现和 TensorFlow 实现的 Keras(即 tf.keras
):
from tensorflow import kerasfrom keras import Model # 错误!不要混合使用 keras 和 tf.keras!from tensorflow.keras.layers import LSTM, Embedding, Dense
你绝不应该这样做。通过使用 from tensorflow.keras import Model
来修正 Model
类的导入。