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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1081閲覧

回帰型のNN作成(Python)

kasappi

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/18 04:25

編集2021/01/20 05:55

以下のようなcsvファイルをもちいてRNNの作成を行いました。データは1セットあたり99の時系列データと1つのラベルのセットで10セットあります。
![イメージ説明

実現したいこと

99の時系列データの答えを1つのラベルとしてNNで作成しています。
入力層に99のデータを与えて1つのラベルを推定するようなNNを作りたいです。

実行したコード

# coding: utf-8 import numpy as np import matplotlib.pyplot as plt import csv from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam #データの準備 def get_data1(): with open("ファイル名") as fp: reader1 = csv.reader(fp) data1 = [ e for e in reader1 ] return data1 def get_data2(): with open("ファイル名") as fp: reader2 = csv.reader(fp) data2 = [ e for e in reader2 ] return data2 ・・・・・ def get__data30(): with open("ファイル名") as fp: reader30 = csv.reader(fp) data30 = [ e for e in reader30 ] return data30 def get_dataset(): class_data1 = [get_data1(), get_data2()] ・・・・ class_data15 = [get_data29(), get_data30()] dataset = np.r_[class_data1, class_data2, class_data3, class_data4, class_data5.....class_data15] x1 = dataset[:,:99] t1 = dataset[:,99].reshape(-1) return x1, t1 x_test, t_test = get_dataset() #ニューラルネットワーク回帰分析の実行 model = Sequential() model.add(Dense(1, activation="linear")) model.compile(loss="mean_squared_error", optimizer="Adam", metrics=["mse"]) num_epoch = 30 his = model.fit(x_test, t_test, epochs = num_epoch, batch_size = 2).history nisokougu_fit = np.linspace(0, 500, 1000) hasakionndo_fit = model.predict()

発生しているエラー

以下のようなエラーが発生します。
csvファイルの値が小数なのがいけないのでしょうか?

TypeError: Value passed to parameter 'a' has DataType string not in list of allowed values: bfloat16, float16, float32, float64, int32, int64, complex64, complex128

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

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

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

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

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

jbpb0

2021/01/18 06:35

特徴量が99、サンプル数が10だと、サンプル数が少なすぎて、何も制約を設けない単純なニューラルネットだと、おそらく過学習が起きてしまいます ニューラルネットに限らず、機械学習アルゴリズムはたいていそうなります 99の特徴量からたった一つの値を予測するのではなく、たとえば50の特徴量から次の一つを予測する、みたいなことはできませんか? https://www.kabuku.co.jp/developers/visualize_intermidiate_conv1d_output の「一次元畳み込み層による時系列予測モデル作成」のアニメーションを見てください そうすれば、1サンプルで50サンプル相当の学習ができるので、10サンプルが500サンプル相当になります
kasappi

2021/01/19 07:17

サンプル数はシミュレーションで増やすことが可能です。 どのくらいの量増やせばよいでしょうか
jbpb0

2021/01/19 07:42 編集

最低限は特徴量数よりも多くですが、過学習してないかテストデータで精度確認しないと、どれくらい必要かは分かりません 特徴量が99ですから、たとえば、学習用100、テスト用100作ってみて、学習後にテスト用データで精度確認して、不十分なら学習用データを2倍ずつ(100→200→400→800...)、テストでの精度が十分に出るまで増やす、とか 学習用データが足りずに過学習が起きたら、学習時のlossはメチャいいけど、テストデータでのlossは良くない、みたいになります その場合は、学習用データが足りません ネットワーク側でできる過学習対策もありますが、それよりもデータを増やす方が効果的です ただし、学習時のlossが上がらないなら、過学習ではなく、ネットワークの構造が良くないとか、学習パラメータが良くないとか、別理由なので、まずはそちらを直した方がいいです 学習データ数が十分ではない場合にちゃんと学習できたら、学習時のlossはメチャ良くなるはず なお、テスト用データ数は、ざっくりと精度を見るだけなら、100のままでもいいと思います (最初はもっと少なくてもいいかもしれない) こちらも、テストで確認する精度の精度(ややこしい)をどれくらい求めるか、で必要な数が変わりますが、そこにこだわるのは、テストでの精度がある程度出てからでいいでしょう
jbpb0

2021/01/20 06:50 編集

「実行したコード」を、当方で適当にcsvファイルを作って走らせたところ、ご質問に書かれているのとは違う、次元が合わないというエラーになりました x_test, t_test = get_dataset() の直後に print(x_test.shape) を実行したら、 (30, 99, 1) と表示されましたので、 x_test = np.squeeze(x_test) を追加し、 print(x_test.shape) で (30, 99) と表示されるようにしたら、学習できました なお、csvファイルは、縦に100個数値が並んでいて、ラベルも含めて全ての数値を小数点以下有り、で作りました 【追記】試したのは「model.fit()」の行までです
kasappi

2021/01/20 07:00

ありがとうございます。 x_test = np.squeeze(x_test)を追加したところ、 tensorflow.python.framework.errors_impl.UnimplementedError: Cast string to float is not supported とエラーが出ました。どこがおかしいでしょうか?
jbpb0

2021/01/20 07:14

> TypeError: Value passed to parameter 'a' has DataType string not in list of allowed values:... > Cast string to float is not supported どちらも、データが文字列だからダメ、というエラーのようです csvファイルの中に、数値以外のものが混入してませんか?
kasappi

2021/01/20 07:30

確認しましたが、csvファイル自体になにか混入しているというわけではないようです。 csvファイルを数値として読み込んでいないのでしょうか
jbpb0

2021/01/20 07:35

x_test = np.squeeze(x_test) の後に、 x_test = x_test.astype(np.float32) t_test = t_test.astype(np.float32) を追加してみてください そうすれば文字列が数値に変換されるので、エラー出なくなると思います たぶん
kasappi

2021/01/20 07:43

エラーなく実行できました。 助かりました。ありがとうございます。
jbpb0

2021/01/20 07:48

x_test, t_testの型を確認したら、こちらでも文字列で読み込まれてました こちらではそれでもエラーが出ず学習できていたため、気が付くのが遅れました エラーにならなかったのは、こちらで使ってるTensorflowやKerasのバージョンが古いためかもしれません
toast-uz

2021/01/30 02:27

解決されたのであれば、クローズをお願いします
guest

回答1

0

TypeError: Value passed to parameter 'a' has DataType string not in list of allowed values:...

データが文字列だからダメ、というエラーのようです

また、「実行したコード」を、当方で適当にcsvファイルを作って走らせたところ、ご質問に書かれているのとは違う、次元が合わないというエラーになりました

python

1x_test, t_test = get_dataset()

の直後に

python

1print(x_test.shape)

を実行したら、「(30, 99, 1)」と表示されましたので、

python

1x_test = np.squeeze(x_test) 2x_test = x_test.astype(np.float32) 3t_test = t_test.astype(np.float32)

を追加し、

python

1print(x_test.shape)

で「(30, 99)」と表示されるように、かつ、文字列が数値に変換されるようにしたら、学習できると思います

投稿2021/02/28 13:38

jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問