从TF 1.12移至1.10后,稠密层输出形状错误

时间:2019-01-19 16:12:07

标签: python tensorflow keras amazon-sagemaker

我正在从Tensorflow 1.12迁移到Tensorflow 1.10(协作-> AWS sagemaker),该代码在Tensorflow 1.12中似乎运行良好,但是在1.10中我遇到了一个错误ValueError: Error when checking target: expected dense to have 2 dimensions, but got array with shape (52692,)

输入示例-不含空格的字符串:

["testAbc", "aaDD", "roam"]

我通过将小写字母更改为1,大写字母2,数字-3,'-'-4,4,'_'-5和填充使其长度等于0s来进行预处理

和4个标签a-0,b-1,c-2,d-3

假设每个单词的最大长度为10(在我的代码中为20):

功能-[[1 1 1 1 2 1 1 0 0 0] [1 1 2 2 0 0 0 0 0 0] [1 1 1 1 0 0 0 0 0 0]]

标签-[1、2、3]

预期输出:[a:0%,b:0%,c:1%,d:99%](示例)

model = keras.Sequential()
model.add(
    keras.layers.Embedding(6, 8, input_length=maxFeatureLen))
model.add(keras.layers.LSTM(12))
model.add(keras.layers.Dense(4, activation=tf.nn.softmax))
model.compile(tf.train.AdamOptimizer(0.001), loss="sparse_categorical_crossentropy")
model.fit(train["featuresVec"],
            train["labelsVec"],
            epochs=1,
            verbose=1,
            callbacks=[],
            validation_data=(evale["featuresVec"], evale["labelsVec"],),
            validation_steps=evale["count"],
            steps_per_epoch=train["count"])

逃生的形状-2D阵列

train["featuresVec"]=
[[1 2 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0]
 [1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0]]

evale["featuresVec"]=
[[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0]
 [1 1 1 1 1 1 2 1 1 1 1 1 0 0 0 0 0 0 0 0]
 [1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 0]
 [1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 0 0]
 [1 1 1 1 1 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0]]

train["labelsVec"] = [1 0 0 0 2]
evale["labelsVec"] = [0 1 1 1 1]

形状:

train["featuresVec"] = [52692, 20]
evale["featuresVec"] = [28916, 20]
train["labelsVec"] = [52692]
evale["labelsVec"] = [28916]

1 个答案:

答案 0 :(得分:1)

您的标签矢量可能需要为(batch_size, 1)而不是(batch_size,)

注意:由于您使用sparse_categorical_crossentropy作为损失函数而不是categorical_crossentropy,因此不对标签进行一次热编码是正确的。