![](/img/trans.png)
[英]Encog :“The Machine Learning Method has an input length of 7, but the training has 0” error
[英]“The input sequence has an insufficient number of elements” on a Seq.length call?
我正在研究Matasano加密挑戰,但遇到一個奇怪的錯誤。 我有一個整數的Seq,並且在調用Seq.length(或Seq.sum)時,得到一個“ System.InvalidOperationException”,解釋為“輸入序列的元素數不足。” 通常,此錯誤與在空的Seq上調用Seq.take或類似事件有關,但是此Seq不為空,通常不會導致此類異常的調用也不相同。
let HammingDistance (b1:seq<byte>) (b2:seq<byte>) : int =
let bytePairs = Seq.zip b1 b2
let HammingWeight (b:byte) =
let bitPositions = {0 .. 7}
let isSet (byte1:byte) (offset:int) = if (byte1 &&& ((byte 1) <<< offset)) > (byte 0) then 1 else 0
Seq.map (isSet b) bitPositions |> Seq.sum
let HammingDistanceBytes (byte1, byte2) =
HammingWeight (byte1 ^^^ byte2)
let distances = Seq.map HammingDistanceBytes bytePairs
printfn "Distances: %A" distances
printfn "Distances length: %d" (Seq.length distances)
Seq.sum distances
異常之前的最后幾行輸出如下:
Distances length: 1435
Distances: seq [3; 3; 1; 5; ...]
Distances length: 1436
Distances: seq [3; 6; 2; 1; ...]
Distances length: 1437
Distances: seq [0; 3; 2; 3; ...]
Distances length: 1438
Distances: seq [3; 3; 4; 2; ...]
誰能解釋為什么會發生這種異常,或者給出我應該采取的進一步診斷問題的步驟?
這里的問題與延遲評估有關-首先無法生成b2,因為它是從較大的列表派生的:
// message:seq<byte>
let firstKeysizeBytes = Seq.take keysize message
let secondKeysizeBytes = Seq.skip keysize message |> Seq.take keysize
直到最終序列被強制評估時,該異常才會彈出。 錯誤消息的放置非常令人困惑,但這就是懶惰求生的生活。 我可能應該轉向使用嚴格的順序類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.