形状不匹配,2D输入和2D标签

问题描述 投票:0回答:1

我想创建一个神经网络,说的容易-从图像(灰度)中创建图像我已经成功创建了3200个输入和输出(标签)图像示例的数据集。(我知道数据集应该更大,但现在不是问题)

输入[Xin]的大小为(3200、50、30),因为它是50 * 30像素输出[yout]的大小为(3200、30、20),因为它是30 * 20像素

我想尝试一个完全连接的网络(后来在CNN上)全连接模型的构建如下所示:

# 5 Create Model
model = tf.keras.models.Sequential()                                
model.add(tf.keras.layers.Flatten())                                
model.add(tf.keras.layers.Dense(256, activation=tf.nn.relu))        
model.add(tf.keras.layers.Dense(30*20, activation=tf.nn.relu))    


#compile the model
model.compile(optimizer='adam',                                    
              loss='sparse_categorical_crossentropy',               
              metrics=['accuracy'])                                 

# 6 Train the model
model.fit(Xin, yout, epochs=1)                                      #train the model

此后出现以下错误:

ValueError:形状不匹配:标签的形状(接收到(19200,))应等于logits的形状,但最后一个尺寸除外(接收到(32,600))。

我已经尝试过扁平化你的动作:

youtflat = yout.transpose(1,0,2).reshape(-1,yout.shape[1]*yout.shape[2])

但是这导致了相同的错误

python tensorflow shapes mismatch logits
1个回答
0
投票

看来您正在完全展平标签(yout),也就是说,您丢失了批量尺寸。如果原始yout的形状为(3200, 30, 20),则应将其重塑为(3200, 30*20)的形状,该形状等于(3200, 600)

yout = numpy.reshape((3200, 600))

然后它应该工作

NOTE但是,建议的修复程序只能消除错误。我发现您的方法有很多问题。对于您要执行的任务(获取图像作为输出),不能将sparse_categorical_crossentropy用作损失,而将accuracy用作度量。您应该改用“ mse”或“ mae”。

© www.soinside.com 2019 - 2024. All rights reserved.