tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed

项目场景:

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铺平。

你可能感兴趣的:(tensorflow,自然语言处理)