我遇到了一个问题,我花了太长时间。我已经阅读了很多文档并观看了许多教程,却不明白为什么当我从示例中修改我的网络时,人们总是显示并输入我自己的数据!
我有一个形状正确的数据集:
train_X.shape = (312,5000,7)
train_Y.shape = (312,5000,1)
我按正确的顺序进行处理(312个样本,5000个时间步长,7个数据通道)。然后,我为这312个样本中的每个样本创建了一个标签集,如果我想要或不想要,它只会显示0或1。这非常类似于Coursera所做的激活字工作,但我根本不尝试使用语音或音频,这是传感器数据(时间驱动的传感器数据)。
我有2个问题,我想如果有人可以回答第一个问题,我可能会想出来,或者如果您能明白为什么我在这里失败,那也将不胜感激。
我决定建立一个相当深的模型(我的浅表的性能较差),并从原始模型开始重新设计。我的问题是它根本不再喜欢尺寸。
model = Sequential()
model.add(CuDNNLSTM(LSTM_units,
input_shape = (x_train.shape[1:]),
return_sequences=True))
model.add(Dropout(DR))
model.add(CuDNNLSTM(LSTM_units,
return_sequences=True))
model.add(Dropout(DR))
model.add(CuDNNLSTM(LSTM_units))
model.add(Dropout(DR))
model.add(Dense(32, activation='relu'))
model.add(Dropout(DR))
model.add(Dense(2, activation='softmax'))
我的编译工作很好,很高兴,并且给了我一个摘要,详细说明了我的模型将在LSTM结束时从(None,5000,18)->(None,128)慢慢变到(无,32)->(无,2),因为我有2个班级(0或1)。
在尝试适应模型时,我被告知:
Error when checking target: expected dense_14 to have 2 dimensions, but got array with shape (312, 5000, 1)
我试图在将矩阵传递到密集层时重塑矩阵,但这似乎根本不起作用...
所以我的问题是这样的: 1)在建立模型方面,我在这里做错了什么?
2)有没有一种方法可以...在每步发生时打印出张量大小,而不是在model.summary命令中?
谢谢。
答案 0 :(得分:0)
我在这里找到了解决方法
Incompatible dense layer error in keras
我认为我不能将我的问题标记为重复的问题...本质上,我遇到的问题是我要求网络给我输出(batch_size,2),而实际上我想得到输入中每个数据点的答案!
我将几个教程中的不良做法全部合并为一个,给了我很多问题。希望这对遇到同样问题的人有所帮助。我的更新代码也发布在下面。
def create_model(x_train, GRU_units,DR):
model = Sequential()
print("Adding first layer...")
model.add(CuDNNLSTM(GRU_units,
input_shape = (x_train.shape[1:]),
return_sequences=True))
model.add(Dropout(DR))
print(model.output_shape)
print("Adding second layer...")
model.add(CuDNNLSTM(GRU_units,
return_sequences=True))
model.add(Dropout(DR))
print(model.output_shape)
print("Adding third layer...")
model.add(CuDNNLSTM(GRU_units,
return_sequences=True))
model.add(Dropout(DR))
print(model.output_shape)
print("Adding fourth layer (Dense 32)...")
model.add(TimeDistributed(Dense(32, activation='relu')))
model.add(Dropout(DR))
print(model.output_shape)
print("Adding output layer...")
model.add(TimeDistributed(Dense(1, activation='sigmoid')))
print(model.output_shape)
return model