tensorflow,使用
sparse_categorical_crossentropy损失函数报错原因
:
from keras import optimizers
optimizer = optimizers.rmsprop_v2.RMSprop(lr=0.01)#训练的优化器,使用rmsprop学习率为0.01
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer)#顺势函数使用困惑度
history=model.fit(trian_x,trian_y,epochs=50, batch_size=100, callbacks=callbacjs_list,validation_data=(val_x,val_y))#训练模型批次50,批次大小100,使用检测学习
报错如下
tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [Condition x == y did not hold element-wise:] [x (sparse_categorical_crossentropy/SparseSoftmaxCross EntropyWithLogits/Shape_1:0) = ] [100 1] [y (sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/strided_slice:0) = ] [100 2] [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/assert_equal_1/Assert/Assert
如果有Embedding层的话可能是embedding层后面没有加flaten导致导致计算过大;
如果没有Embedding层的话可以参考这篇文章。
from keras import layers
import keras
embedding_dim=10#词向量的维度
max_words=1000#词典的大小
#使用tf的api架构构建模型
main_input = tf.keras.layers.Input(shape=(maxlen, ), dtype='float32')#模型的输入
model_1 = tf.keras.layers.Embedding(max_words, embedding_dim, input_length=maxlen)(main_input)#词向量层
# model_1 = tf.keras.layers.Flatten()(model_1)#维度展品方便计算
output = tf.keras.layers.Dense(1000, activation='softmax')(model_1)#前馈神经网络层,softmax作为激活函数
model = keras.models.Model(main_input, output)
换成如下
from keras import layers
import keras
embedding_dim=10#词向量的维度
max_words=1000#词典的大小
#使用tf的api架构构建模型
main_input = tf.keras.layers.Input(shape=(maxlen, ), dtype='float32')#模型的输入
model_1 = tf.keras.layers.Embedding(max_words, embedding_dim, input_length=maxlen)(main_input)#词向量层
model_1 = tf.keras.layers.Flatten()(model_1)#维度展品方便计算
output = tf.keras.layers.Dense(1000, activation='softmax')(model_1)#前馈神经网络层,softmax作为激活函数
model = keras.models.Model(main_input, output)
总结:Embedding层下,不能直接,搭建全连接层,如果想要搭建全连接层,可以用flatten铺平。