Keras 如何在模型中输入;一份产出清单;?

Keras 如何在模型中输入;一份产出清单;?,keras,Keras,很抱歉给你起了个标题,但我在这里想不出更好的描述 我尝试在一个应该有13个完全连接的输出层的模型上应用批次进行培训。每个输出层只有两个节点(但按规定完全连接) 构建模型的输出如下所示: outputs=list() 对于范围内的i(num_标签): out_y=densite(2,activation='softmax',name='out_{:d}'。格式(i))(卷积层) 输出。追加(输出) self.model=模型(输入=输入,输出=输出) 然而,我无法满足这种模式。我尝试使用[bat

很抱歉给你起了个标题,但我在这里想不出更好的描述

我尝试在一个应该有13个完全连接的输出层的模型上应用批次进行培训。每个输出层只有两个节点(但按规定完全连接)

构建模型的输出如下所示:

outputs=list()
对于范围内的i(num_标签):
out_y=densite(2,activation='softmax',name='out_{:d}'。格式(i))(卷积层)
输出。追加(输出)
self.model=模型(输入=输入,输出=输出)
然而,我无法满足这种模式。我尝试使用
[batch\u size,13,1,2]
大小的输出数组:

y=np.零((批次大小,13,1,2))
但对于一批尺寸为2的产品,我得到:

ValueError: The model expects 13 input arrays, but only received one array. Found: array with shape (2, 13, 1, 2)
我尝试过其他几种方法,但我并不清楚模型的输入是什么样子的

我如何训练这个模型


我还尝试传递numpy数组列表:

其中,批处理的第一级表示样本(此处为2),第二级表示包含13个numpy数组列表的样本。然而,我得到了:

ValueError: Error when checking model target: you are passing a list as input to your model, but the model expects a list of 13 Numpy arrays instead. The list you passed was: [[array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 0.,  1.]), array([ 1.,  0.]), array([ 

根据建议,我还尝试返回大小为
[13,2]
的numpy数组的
列表()

当错误变为:

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 13 arrays but instead got the following list of 2 arrays: [array([[ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 1.,  0.],
       [ ...

代码 您可以在下面找到当前代码,该代码在
sample\u generator
中生成一个样本,在
batch\u generator
中生成一个完整批次(使用
sample\u generator

def批处理生成器(w2v、文件路径、元信息、批处理大小、样本生成器大小、嵌入大小):

请注意:代码现在显示了我如何生成
[13,2]
数据数组的
列表()
,而该列表中此类数据数组的数量由
批量大小定义

试试看:
x=np.0((批处理大小,元信息最大序列长度,嵌入大小,1))
y=列表()#np.零((批次大小,13,1,2))
文件=打开(文件路径)
尽管如此:
x[:]=0.0
#y[:]=0.0
对于范围内的批次(批次大小):
语句\u info\u json=file.readline()
如果句子信息json=='':
file.seek(0)
语句\u info\u json=file.readline()
样本=样本生成器(w2v,句子信息json,元信息)
如果不是样品:
持续
句子嵌入=样本[0]
最终长度=len(句子嵌入)
x[批次:最终长度:,0]=句子嵌入
y、 追加(示例[1])
混洗=np.asarray(范围(批量大小))
np.random.shuffle(洗牌)
x=x[洗牌]
#y=y[洗牌]
y=[y[i]代表洗牌中的i]
产量x,y
例外情况除外,如e:
打印('生成器中有错误')
打印(e)
提高e
def样本生成器(w2v,句子信息json,元信息):
如果不是句子信息json:
打印(“???”)
句子信息=json.loads(句子信息=json)
tokens=[token['word']表示句子信息中的token['corenlp']['tokens']]
句子=句子(标记=标记)
句子嵌入=w2v.get\u单词向量(句子.tokens.tolist())
句子\u嵌入=np.asarray([如果单词\u向量不是None,则句子\u嵌入中单词\u向量的单词\u向量])
最终长度=len(句子嵌入)
如果最终长度=0:
一无所获
y=np.零((2,len(元信息分类)
y[1,:]=1。
#y_列表=[]
y_tar=np.0((len(元信息分类),2))
对于范围内的i(len(meta_.info.category_dict)):
y_tar[i][1]=1.0
#y_list.append(np.asarray([0.0,1.0]))
对于句子信息[‘意见’]中的意见:
索引=元信息.类别[意见['category']]
焦油[指数][0]=1.0
油焦油[指数][1]=0.0
#y_列表[索引][0]=1.0
#y_列表[索引][1]=0.0
返回语句_嵌入,y_tar
根据请求,调用
fit\u generator()

cnn.model.fit_生成器(生成器=批量生成器(word2vec,
列车文件,列车元信息,
数量批次、样本生成器、,
嵌入(U尺寸),
每个历元的样本数=2000,
nb_epoch=2,
#验证数据=批处理生成器(测试文件路径、序列元信息),
#nb_val_样本=100,
详细=正确)

您的输出应该是错误中指定的列表。列表中的每个元素都应该是一个大小为
[批次大小,nb\u输出]
的numpy数组。因此,在您的情况下,一个包含13个大小元素的列表
[batch\u size,2]

您将此数组馈送到哪个方法?拟合还是预测?@MarcinMożejko我正在使用
Fitżu generator()
您能为我们提供此方法调用的完整代码吗?@MarcinMożejko哪一个?我不确定调用
fit\u generator()
是否有帮助。但是,我可以发布示例生成器(请参见更新),但您能否通过调用model.fit_generator()向我们展示代码?这无法工作,因为我必须为每个示例提供至少一个13x2矩阵作为输入。这意味着我不能低于
[batch\u size,13,2]
或类似的东西。13个大小数组的列表
[batch\u size,2]
13*batch\u size*2
,它的元素数量与
[batch\u size,13,2]
完全相同,但你说的是“列表中的每个元素都应该是一个大小为numpy的数组
[batch\u size,nb\u outputs]
”。那么你的意思是“每个元素都应该是一个
[13,2]
numpy数组”,对吗?因为我非常确定我已经尝试过了。我更新了我的问题。最后一个例子是
列表()
[13,2]
数组,其中列表中有
batch\u size
这样的数组。请记住这一点