如何在 CNN-LSTM 模型上应用 model.fit() 函数?
How to apply model.fit() function over an CNN-LSTM model?
我正在尝试使用它来将图像分为两类。我还应用了 model.fit() 函数,但它显示错误。
ValueError:形状为 (90, 1) 的目标数组被传递给形状为 (None, 10) 的输出,同时用作损失 binary_crossentropy。此损失期望目标与输出具有相同的形状。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D, LSTM
import pickle
import numpy as np
X = np.array(pickle.load(open("X.pickle","rb")))
Y = np.array(pickle.load(open("Y.pickle","rb")))
#scaling our image data
X = X/255.0
model = Sequential()
model.add(Conv2D(64 ,(3,3), input_shape = (300,300,1)))
# model.add(MaxPooling2D(pool_size = (2,2)))
model.add(tf.keras.layers.Reshape((16, 16*512)))
model.add(LSTM(128, activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))
opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(loss='binary_crossentropy', optimizer=opt,
metrics=['accuracy'])
# model.summary()
model.fit(X, Y, batch_size=32, epochs = 2, validation_split=0.1)
如果您的问题是明确的,那么您的问题是您使用的是 binary_crossentropy
而不是 categorical_crossentropy
;确保您确实有分类问题而不是二元分类问题。
此外,请注意,如果您的标签是简单的整数格式,例如 [1,2,3,4...] 而不是单热编码,则您的 loss_function 应该是 sparse_categorical_crossentropy
,而不是 categorical_crossentropy
。
如果您确实遇到二元分类问题,如上述错误中所述,请确保:
- 损失为binary_crossentroy +
Dense(1,activation='sigmoid')
- 损失为categorical_crossentropy +
Dense(2,activation='softmax')
我正在尝试使用它来将图像分为两类。我还应用了 model.fit() 函数,但它显示错误。
ValueError:形状为 (90, 1) 的目标数组被传递给形状为 (None, 10) 的输出,同时用作损失 binary_crossentropy。此损失期望目标与输出具有相同的形状。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D, LSTM
import pickle
import numpy as np
X = np.array(pickle.load(open("X.pickle","rb")))
Y = np.array(pickle.load(open("Y.pickle","rb")))
#scaling our image data
X = X/255.0
model = Sequential()
model.add(Conv2D(64 ,(3,3), input_shape = (300,300,1)))
# model.add(MaxPooling2D(pool_size = (2,2)))
model.add(tf.keras.layers.Reshape((16, 16*512)))
model.add(LSTM(128, activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))
opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(loss='binary_crossentropy', optimizer=opt,
metrics=['accuracy'])
# model.summary()
model.fit(X, Y, batch_size=32, epochs = 2, validation_split=0.1)
如果您的问题是明确的,那么您的问题是您使用的是 binary_crossentropy
而不是 categorical_crossentropy
;确保您确实有分类问题而不是二元分类问题。
此外,请注意,如果您的标签是简单的整数格式,例如 [1,2,3,4...] 而不是单热编码,则您的 loss_function 应该是 sparse_categorical_crossentropy
,而不是 categorical_crossentropy
。
如果您确实遇到二元分类问题,如上述错误中所述,请确保:
- 损失为binary_crossentroy +
Dense(1,activation='sigmoid')
- 损失为categorical_crossentropy +
Dense(2,activation='softmax')