- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在Julia和一般的机器学习领域仍然是新手,但是我非常渴望学习。在当前的项目中,我正在处理尺寸不匹配的问题,无法解决该问题。
我有两个数组如下:
x_array:
9-element Array{Array{Int64,N} where N,1}:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 72, 73]
[11, 12, 13, 14, 15, 16, 17, 72, 73]
[18, 12, 19, 20, 21, 22, 72, 74]
[23, 24, 12, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 72, 74]
[36, 37, 38, 39, 40, 38, 41, 42, 72, 73]
[43, 44, 45, 46, 47, 48, 72, 74]
[49, 50, 51, 52, 14, 53, 72, 74]
[54, 55, 41, 56, 57, 58, 59, 60, 61, 62, 63, 62, 64, 72, 74]
[65, 66, 67, 68, 32, 69, 70, 71, 72, 74]
y_array:
9-element Array{Int64,1}
75
76
77
78
79
80
81
82
83
model = Chain(
LSTM(10, 256),
LSTM(256, 128),
LSTM(128, 128),
Dense(128, 9),
softmax
)
data = zip(x_array, y_array)
Flux.train!(loss, Flux.params(model), data, opt)
ERROR: DimensionMismatch("matrix A has dimensions (1024,10), vector B has length 9")
ERROR: DimensionMismatch("dimensions must match")
最佳答案
介绍
首先,您应该知道,从体系结构的角度来看,您正在从网络中提出一些非常困难的问题。 softmax
将输出重新标准化为0
和1
之间的权重(像概率分布一样加权),这意味着让您的网络输出类似77
的值来匹配y
是不可能的。这不是导致尺寸不匹配的原因,但需要注意。我将在最后放下softmax()
来给网络一个战斗的机会,尤其是因为它不是引起问题的原因。
调试形状不匹配
让我们来看一下Flux.train!()
内部实际发生的情况。 The definition实际上非常简单。忽略对我们无关紧要的一切,我们只剩下:
for d in data
gs = gradient(ps) do
loss(d...)
end
end
data
中拉出第一个元素,然后将其放入
loss
函数中。您没有在问题中指定损失函数或优化器。尽管
softmax
通常意味着您应该使用
crossentropy
损失,但是您的
y
值几乎不是概率,因此,如果我们删除
softmax
,我们就可以使用简单的
mse()
损失。对于优化程序,我们将默认使用旧的ADAM:
model = Chain(
LSTM(10, 256),
LSTM(256, 128),
LSTM(128, 128),
Dense(128, 9),
#softmax, # commented out for now
)
loss(x, y) = Flux.mse(model(x), y)
opt = ADAM(0.001)
data = zip(x_array, y_array)
Flux.train!()
的第一次运行,我们采用
first(data)
并将其喷射到
loss()
中:
loss(first(data)...)
ERROR: DimensionMismatch("matrix A has dimensions (1024,10), vector B has length 12")
。查看我们的数据,可以看到,确实,数据集的第一个元素的长度为12。因此,我们将更改模型以改为期望12个值而不是10个值:
model = Chain(
LSTM(12, 256),
LSTM(256, 128),
LSTM(128, 128),
Dense(128, 9),
)
julia> loss(first(data)...)
50595.52542674723 (tracked)
julia> loss(first(data)...)
50578.01417593167 (tracked)
julia> loss([d for d in data][2]...)
ERROR: DimensionMismatch("matrix A has dimensions (1024,12), vector B has length 9")
LSTM
网络提供长度为
10
的向量(现在是
12
),而我们正在兑现这一承诺。这是深度学习的一般规则;您始终必须遵守关于流经模型的张量形状的合同。
LSTM
层时,您不是在声明要输入的序列的长度,而是在声明每个时间点的维数。假设您的加速度计读数长了1000点,并在每个时间点给出了X,Y,Z值;要读懂它,您将创建一个
LSTM
,它的维度为
3
,然后将其输入
1000
次。
Chain
并循环调用它;对于每个输入时间点,您将输出另一个。
pacman = Chain(
LSTM(1, 128), # map from timepoint size 1 to 128
LSTM(128, 256), # blow it up even larger to 256
LSTM(256, 128), # bottleneck back down to 128
)
reducer = Chain(
Dense(128, 9),
#softmax, # keep this commented out for now
)
loss(x, y)
函数,而不是调用
model(x)
,而是执行pacman跳舞,然后在输出上调用reducer。请注意,我们还必须
reset!()
RNN状态,以便为每个独立的训练示例清除内部状态:
function loss(x, y)
# Reset internal RNN state so that it doesn't "carry over" from
# the previous invocation of `loss()`.
Flux.reset!(pacman)
# Iterate over every timepoint in `x`
for x_t in x
y_hat = pacman(x_t)
end
# Take the very last output from the recurrent section, reduce it
y_hat = reducer(y_hat)
# Calculate reduced output difference against `y`
return Flux.mse(y_hat, y)
end
Flux.train!()
实际上可以训练,尽管效果不是很好。 ;)
Int64
的,但在除嵌入之外的所有内容上都使用浮点数是很典型的(嵌入是一种获取非数字数据(例如字符或单词)并为其分配数字的方式,类似于ASCII );如果要处理文本,几乎可以肯定会进行某种形式的嵌入,而这种嵌入将决定第一个LSTM的维数,然后所有输入都将被“一次性”编码。
softmax
;它将确保每个输入的所有输出都在
[0...1]
之间,而且它们的总和等于
1.0
,就像一个很小的概率分布一样。这在进行分类时最有用,当您想将
[-2, 5, 0.101]
的狂野网络输出值整理成某种内容时,您可以说“我们有
99.1%
确定第二类是正确的,而
0.7%
确定是第三类是正确的类。”
Sx1
而不是传递单个
S
向量(其中
SxN
是嵌入的大小),矩阵,但这也意味着批处理中所有内容的时间步数必须匹配(因为
SxN
必须在所有时间步中保持相同,因此,如果一个时间序列在批处理中的任何其他时间序列之前都结束了,只需将其丢弃,从而在批处理的一半处减少
N
)。因此,大多数人所做的就是将其时间序列全部填充到相同的长度。
关于machine-learning - 错误:在Julia中使用Flux的“DimensionMismatch(”矩阵A的尺寸为(1024,10),向量B的长度为9”),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142582/
使用 julia 控制台时,您输入如下内容: [10,20]*[1:100,1:100]' 你会得到这样的输出: 2x200 Array{Int64,2}: 10 20 30 40 50
Julia Computing 提供的 Julia 和 Julia Pro 有什么区别? Julia Pro 是否有任何在 Julia 中不可用的企业库? 最佳答案 正如您在 project desc
我最近将我的一个模拟移植到 Julia 中,我仅在运行时发现了几个类型错误。我希望静态分析我的 Julia 代码。 MATLAB 也有类似的问题,只在运行时发现很多错误。 我发现的唯一工具 ( Typ
是否有一种简单的方法来监控 julia 和所有 julia 包的提交和开发?我知道 https://github.com/JuliaLang/julia/commits/master 最佳答案 如果您
我正在从 R 迁移,我使用 head() function很多。我在 Julia 中找不到类似的方法,所以我为 Julia Arrays 写了一个。我还将其他几个 R 函数移植到 Julia。 我需要
在某些语言(如 Python)中,有函数装饰器,它们看起来像宏,位于函数定义之上。装饰器为函数本身提供了一些额外的功能。 Julia 是否以任何方式支持函数装饰器的想法?是否可以使用宏来实现相同的目标
我用Julia中的pmap()函数写了一段并行代码。 然后我在集群上保护了四个核心并运行了一个脚本: julia -p 12 my_parallel_program.jl 我现在应该取消我的工作吗?现
谁能帮我理解接下来的事情: 1)为什么我们需要在制作链表的同时制作一个 future 结构的新抽象类? 2) 为什么有参数 T? 3)这个操作符是干什么的 struct BrokenList
我在 Julia 中有一个数组 Z,它表示二维高斯函数的图像。 IE。 Z[i,j] 是像素 i,j 处的高斯高度。我想确定高斯的参数(均值和协方差),大概是通过某种曲线拟合。 我研究了各种拟合 Z
假设,我们有如下数据结构 struct MyStruct{T} t :: Union{Nothing, T} end 并且我们希望允许用户在不添加任何数据的情况下初始化结构,例如 MyStru
我有一个包含相同类型字段的结构,我无法在创建时分配该字段。 Julia 似乎不喜欢以下内容。 (它吐出一个循环引用投诉。)我打算将问题归结为它的本质 mutable struct Test t
我正在尝试使用最大似然估计 Julia 中的正态线性模型。根据 Optim 文档中关于不更改的值,我使用以下代码通过拦截和匿名函数来模拟该过程: using Optim nobs = 500 nvar
有没有办法从命令行更新 Julia?我浏览了 documentation ,但我找不到任何东西。 最佳答案 我建议尝试 asdf如果您使用的是 MacOS、Linux 或 Linux 的 Window
我想对维度为 n 乘以 n 的矩阵 A 中的所有元素求和。该矩阵是对称的并且对角线上有 0。我发现最快的方法就是求和(A)。然而,这似乎很浪费,因为它没有使用我只需要计算矩阵的下三角这一事实。但是,s
假设你有一个向量元组 $a$,我想在 julia 中定义一个函数 p(x)=x^a。 例如,如果 a=(1,2,3),则结果函数将为 x^1 *y^2 * z^3。 我想为任何元组提供一个通用方法,但
例如,我希望能够按照以下方式做一些事情: abstract Tree abstract SupervisedModel type DecisionTree <: Tree, SupervisedMod
在 Julia 中构建复杂表达式时,是否可以使用列表推导式之类的东西? 例如,假设我有一些符号和类型,并想从它们构建一个类型。现在,我必须做类似的事情。 syms = [:a, :b, :c] typ
在 MATLAB 中,[N,edges,bin] = histcounts (___) 可以获得相应元素的 bin 索引。 Julia 有什么等价的功能吗?谢谢! 我已经尝试过 StatsBase.j
我有一个 Julia 脚本,它反复调用 C++ 程序来执行优化。 C++ 程序写入一个文本文件,然后我让 Julia 读取结果并决定下一步做什么。问题是偶尔(可能是 1000 多次)C++ 程序卡住(
我使用了一些需要特定版本的 Julia 包(即 ≥ v0.3 和 0.4 ≤)。我找不到编译 Julia 的方法来自特定版本的源代码(我正在使用 Linux )。有没有办法做到这一点,我不知道? Gi
我是一名优秀的程序员,十分优秀!