我尝试将CSV file提供给Kur,但我不知道如何在输入中指定多个列而不会导致程序崩溃。这是一个小例子:
model:
- input:
- SepalWidthCm
- SepalLengthCm
- dense: 10
- activation: tanh
- dense: 3
- activation: tanh
name: Species
train:
data:
- csv:
path: Iris.csv
header: yes
epochs: 1000
weights: best.w
log: tutorial-log
loss:
- target: Species
name: mean_squared_error
错误:
File "/Users/bytter/.pyenv/versions/3.5.2/bin/kur", line 11, in <module>
sys.exit(main())
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/__main__.py", line 269, in main
sys.exit(args.func(args) or 0)
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/__main__.py", line 48, in train
func = spec.get_training_function()
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/kurfile.py", line 282, in get_training_function
model = self.get_model(provider)
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/kurfile.py", line 148, in get_model
self.model.build()
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/model/model.py", line 282, in build
self.build_graph(input_nodes, output_nodes, network)
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/model/model.py", line 356, in build_graph
for layer in node.container.build(self):
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/containers/container.py", line 281, in build
self._built = list(self._build(model))
File "/Users/bytter/.pyenv/versions/3.5.2/lib/python3.5/site-packages/kur/containers/layers/placeholder.py", line 122, in _build
'Placeholder "{}" requires a shape.'.format(self.name))
kur.containers.parsing_error.ParsingError: Placeholder "..input.0" requires a shape.
使用- input: SepalWidthCm
按预期工作。
答案 0 :(得分:2)
您的方法存在的问题是,Kur并不知道您希望如何连接输入。您的输入是否应该成为2D张量的维度(2, N )(其中 N 是CSV文件中的数据点数),像这样?
[
[SepalWidthCm_0, SepalWidthCm_1, ...],
[SepalLengthCm_0, SepalLengthCm_1, ...]
]
( NB,该示例不是非常深入学习的友好结构。)或者应该将它组合成一个维度张量( N ,2) ,像这样?
[
[SepalWidthCm_0, SepalLengthCm_0],
[SepalWidthCm_1, SepalLengthCm_1],
...
]
或者您可能希望将相同的操作并行应用于每个列?无论如何,当您的输入数据是多维的时,这个问题会变得更难/更模糊(例如,不是像长度或宽度这样的标量,而是有矢量甚至是矩阵)。
而不是试图猜测你想要什么(并且可能弄错了),Kur希望每个输入都是一个单一的数据源,然后你可以将它们组合起来,但是你觉得合适。
以下几种方法可能需要将数据合并,以及如何在Kur中进行。
逐行组合。这是上面的第二个例子,我们想要结合&#34;行&#34;将CSV数据转换为元组,以便输入张量具有维度( batchSize ,2)。然后你的Kur模型看起来像:
model:
# Define the model inputs.
- input: SepalWidthCm
- input: SepalLengthCm
# Concatenate the inputs.
- merge: concat
inputs: [SepalWidthCm, SepalLengthCm]
# Do processing on these "vectorized" inputs.
- dense: 10
- activation: tanh
- dense: 1
- activation: tanh
# Output
- output: Species
独立处理,然后合并。这是您在每个输入列上独立执行某些操作的设置,然后将它们合并在一起(之后可能会再执行一些操作)。在ASCII艺术中,这可能看起来像:
INPUT_1 --> dense, activation --\
+---> dense, activation --> OUTPUT
INPUT_2 --> dense, activation --/
在这种情况下,你会有一个看起来像这样的Kur模型:
model:
# First "branch" of processing.
- input: SepalWidthCm
- dense: 10
- activation: tanh
name: WidthBranch
# Second "branch" of processing.
- input: SepalLengthCm
- dense: 10
- activation: tanh
name: LengthBranch
# Fuse things together.
- merge:
inputs: [WidthBranch, LengthBranch]
# Continue some processing
- dense: 1
- activation: tanh
# Output
- output: Species
请注意,自Kur 0.3以来,merge
图层已经存在,所以请确保使用最新版本。
(免责声明:我是Kur的核心维护者。)