質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

997閲覧

TensorSwift TensorFlow

daigakuse-

総合スコア67

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/07 04:38

TensorSwiftに詳しい人に聞きたいのですが、以下の一番上のコードの部分でエラーにかかってしまいます。
Bundle.main.resourcePath!でnilは返ってこないので
ファイル読み込みはできているとは思うのですが、elementsの方が小さくなってしまうのはファイルの中身があまり正常ではないというこうなんでしょうか?
それぞれのファイルは、こちらこちらを参考に
TensorFlowでモデル書き出しを行い、できたファイルをプロジェクトにコピペしました。

swift

1 public init(shape: Shape, elements: [Element]) { 2 let volume = shape.volume() 3 precondition(elements.count >= volume, "`elements.count` must be greater than or equal to `shape.volume`: elements.count = \(elements.count), shape.volume = \(shape.volume())") 4 self.shape = shape 5 self.elements = (elements.count == volume) ? elements : Array(elements[0..<volume]) 6 }

swift

1 path=Bundle.main.resourcePath! 2 W_conv1 = Tensor(shape: [5, 5, 1, 32], elements: loadFloatArray(path, file: "W_conv1")) 3 b_conv1 = Tensor(shape: [32], elements: loadFloatArray(path, file: "b_conv1")) 4 W_conv2 = Tensor(shape: [5, 5, 32, 64], elements: loadFloatArray(path, file: "W_conv2")) 5 b_conv2 = Tensor(shape: [64], elements: loadFloatArray(path, file: "b_conv2")) 6 W_fc1 = Tensor(shape: [Dimension(7 * 7 * 64), 1024], elements: loadFloatArray(path, file: "W_fc1")) 7 b_fc1 = Tensor(shape: [1024], elements: loadFloatArray(path, file: "b_fc1")) 8 W_fc2 = Tensor(shape: [1024, 10], elements: loadFloatArray(path, file: "W_fc2")) 9 b_fc2 = Tensor(shape: [10], elements: loadFloatArray(path, file: "b_fc2")) 10 11private func loadFloatArray(_ directory: String, file: String) -> [Float] { 12 let data = try! Data(contentsOf: URL(fileURLWithPath: directory.stringByAppendingPathComponent(file))) 13 return Array(UnsafeBufferPointer(start: UnsafeMutablePointer<Float>(mutating: (data as NSData).bytes.bindMemory(to: Float.self, capacity: data.count)), count: data.count / 4)) 14}

swift

1import Foundation 2 3extension String { 4 public func stringByAppendingPathComponent(_ str: String) -> String { 5 return (self as NSString).appendingPathComponent(str) 6 } 7}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

elements.countとshape.volume()を出力させてみると
W_fc2 = Tensor(shape: [1024, 10], elements: loadFloatArray(path, file: "W_fc2"))
b_fc2 = Tensor(shape: [10], elements: loadFloatArray(path, file: "b_fc2"))

この2行がエラーに引っかかっていたみたいで、元のpythonのコードと見比べてみると
shapeの10はpythonでは人数だったためswiftでもモデルの人数を入力したらうまく動作した。

投稿2017/08/08 10:33

daigakuse-

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問