我有以下一段代碼,它是我實際代碼的簡化:
#!/usr/bin/env python3
import tensorflow as tf
import re
import numpy as np
import pandas as pd
from tensorflow.keras.preprocessing.text import Tokenizer #text to vector.
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from keras.models import Sequential
DATASIZE = 1000
model = Sequential()
model.add(Embedding(1000, 120, input_length = DATASIZE))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(176, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(2,activation='sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
training = [[0 for x in range(10)] for x in range (DATASIZE)] #random value
label = [[1 for x in range(10)] for x in range (DATASIZE)] #random value
model.fit(training, label, epochs = 5, batch_size=32, verbose = 'auto')
我需要的:
我的最終目標是能夠檢查給定的輸入向量(它是資料的數字表示)是正還是負,因此這里是一個二元分類問題。這里所有 1000 個向量都是 10 位長,但它可能更長或更短,整個資料集的長度可能會有所不同。
運行它時,我收到以下錯誤:
ValueError: logits and labels must have the same shape ((None, 2) vs (None, 10))
我必須如何構造我的向量才能避免出現此錯誤并實際正確地擬合模型?
編輯:
我可以將model.add(Dense(2,activation='sigmoid'))呼叫更改為model.add(Dense(10,activation='sigmoid')). 但這沒有多大意義,我認為。因為 Dense 的第一個引數是輸出可能性的實際數量。就我而言,只有兩種可能性:正面或負面。所以經常將其更改為 10,使程式運行,但對我來說沒有意義。而且我什至不確定它是否使用了我的 1000 個訓練向量....
uj5u.com熱心網友回復:
你的最后一層dense有 2 個神經元,而你的資料集有 10 個標簽。所以從技術上講,最后一層的神經元數量必須與資料集中的類數相同,在您的情況下為 10。只需在最后dense一層用 10 替換 2 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347408.html
下一篇:Keras輸入Pandas資料框
