質問編集履歴

1

情報の追加

2021/01/20 05:55

投稿

kasappi
kasappi

スコア3

test CHANGED
@@ -1 +1 @@
1
- 分類型のRNNを回帰型のNNに書き換えたいです。(Python)
1
+ 回帰型のNN作成(Python)
test CHANGED
@@ -1,56 +1,32 @@
1
- 以下のようなcsvファイルをもちいてRNNの作成を行いました。データは1セットあたり99の時系列データと1つのラベルのセットで10セットあります。(学習用データとテスト用データで10個ずつ計20個)
1
+ 以下のようなcsvファイルをもちいてRNNの作成を行いました。データは1セットあたり99の時系列データと1つのラベルのセットで10セットあります。
2
2
 
3
3
  ![![イメージ説明](4b097f1155c1ea692bf3c18d1a3ec469.png)
4
4
 
5
5
  ### 実現したいこと
6
6
 
7
- 99の時系列データの答えを1つのラベルとしてone-hot型推定たのですが、これを回帰型のNNに書き換えたす。
7
+ 99の時系列データの答えを1つのラベルとしてNN作成す。
8
8
 
9
9
  入力層に99のデータを与えて1つのラベルを推定するようなNNを作りたいです。
10
10
 
11
11
  ### 実行したコード
12
12
 
13
- ```# coding: utf-8
13
+ ```#!/usr/bin/env python
14
14
 
15
- from __future__ import absolute_import
16
-
17
- from __future__ import division
18
-
19
- from __future__ import print_function
20
-
21
-
22
-
23
- import random
15
+ # coding: utf-8
24
16
 
25
17
  import numpy as np
26
18
 
27
- import tensorflow as tf
19
+ import matplotlib.pyplot as plt
28
20
 
29
21
  import csv
30
22
 
23
+ from keras.models import Sequential
24
+
31
- from tensorflow.contrib import rnn
25
+ from keras.layers import Dense
26
+
27
+ from keras.optimizers import Adam
32
28
 
33
29
 
34
-
35
- # パラメーター
36
-
37
- N_CLASSES = 500 # クラス数
38
-
39
- N_INPUTS = 1 # 1ステップに入力されるデータ数
40
-
41
- N_STEPS = 20 # 学習ステップ数
42
-
43
- LEN_SEQ = 99 # 系列長
44
-
45
-
46
-
47
- N_NODES = 64 # ノード数
48
-
49
- N_DATA = 10 # 各クラスの学習用データ数
50
-
51
- N_TEST = 10 # テスト用データ数
52
-
53
- BATCH_SIZE = 2 # バッチサイズ
54
30
 
55
31
 
56
32
 
@@ -82,138 +58,66 @@
82
58
 
83
59
  ・・・・・
84
60
 
85
- def get__data20():
61
+ def get__data30():
86
62
 
87
63
  with open("ファイル名") as fp:
88
64
 
89
- reader20 = csv.reader(fp)
65
+ reader30 = csv.reader(fp)
90
66
 
91
- data20 = [ e for e in reader20 ]
67
+ data30 = [ e for e in reader30 ]
92
68
 
93
- return data20
69
+ return data30
94
70
 
95
71
 
96
72
 
97
- def get_dataset1():
73
+ def get_dataset():
98
74
 
99
75
  class_data1 = [get_data1(), get_data2()]
100
76
 
101
77
  ・・・・
102
78
 
103
- class_data5 = [get_data9(), get_data10()]
79
+ class_data15 = [get_data29(), get_data30()]
104
80
 
105
- dataset1 = np.r_[class_data1, class_data2, class_data3, class_data4, class_data5]
81
+ dataset = np.r_[class_data1, class_data2, class_data3, class_data4, class_data5.....class_data15]
106
82
 
107
- x1 = dataset1[:,:99]
83
+ x1 = dataset[:,:99]
108
84
 
109
- t1 = dataset1[:,99].reshape(-1)
85
+ t1 = dataset[:,99].reshape(-1)
110
86
 
111
87
  return x1, t1
112
88
 
113
89
 
114
90
 
115
- def get_dataset2():
91
+ x_test, t_test = get_dataset()
116
-
117
- class_data6 = [get_data11(), get_data12()]
118
-
119
- ・・・・
120
-
121
- class_data10 = [get_data19(), get_data20()]
122
-
123
- dataset2 = np.r_[class_data6, class_data7, class_data8, class_data9, class_data10]
124
-
125
- x2 = dataset2[:,:99]
126
-
127
- t2 = dataset2[:,99].reshape(-1)
128
-
129
- return x2, t2
130
92
 
131
93
 
132
94
 
133
- x_train, t_train = get_dataset1() #学習用デタセット
95
+ #ニュラルネットワーク回帰分析の実行
134
96
 
135
- x_test, t_test = get_dataset2() #テスト用データセット
97
+ model = Sequential()
136
98
 
99
+ model.add(Dense(1, activation="linear"))
137
100
 
101
+ model.compile(loss="mean_squared_error", optimizer="Adam", metrics=["mse"])
138
102
 
139
- # モデルの構築
103
+ num_epoch = 30
140
104
 
141
- x = tf.placeholder(tf.float32, [None, LEN_SEQ, N_INPUTS]) # 入力データ
105
+ his = model.fit(x_test, t_test, epochs = num_epoch, batch_size = 2).history
142
106
 
143
- t = tf.placeholder(tf.int32, [None]) # 教師データ
107
+ nisokougu_fit = np.linspace(0, 500, 1000)
144
108
 
145
- t_on_hot = tf.one_hot(t, depth=N_CLASSES, dtype=tf.float32) # 1-of-Kベクトル
146
-
147
- cell = rnn.BasicRNNCell(num_units=N_NODES, activation=tf.nn.tanh) # 中間層のセル
148
-
149
- # RNNに入力およびセル設定する
150
-
151
- outputs, states = tf.nn.dynamic_rnn(cell=cell, inputs=x, dtype=tf.float32, time_major=False)
152
-
153
- # [ミニバッチサイズ,系列長,出力数]→[系列長,ミニバッチサイズ,出力数]
154
-
155
- outputs = tf.transpose(outputs, perm=[1, 0, 2])
156
-
157
-
158
-
159
- w = tf.Variable(tf.random_normal([N_NODES, N_CLASSES], stddev=0.01))
160
-
161
- b = tf.Variable(tf.zeros([N_CLASSES]))
162
-
163
- logits = tf.matmul(outputs[-1], w) + b # 出力層
164
-
165
- pred = tf.nn.softmax(logits) # ソフトマックス
166
-
167
-
168
-
169
- cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=t_on_hot, logits=logits)
170
-
171
- loss = tf.reduce_mean(cross_entropy) # 誤差関数
172
-
173
- train_step = tf.train.AdamOptimizer().minimize(loss) # 学習アルゴリズム
174
-
175
-
176
-
177
- correct_prediction = tf.equal(tf.argmax(pred,1), tf.argmax(t_on_hot,1))
178
-
179
- accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 精度
180
-
181
-
182
-
183
- # 学習の実行
184
-
185
- sess = tf.Session()
186
-
187
- sess.run(tf.global_variables_initializer())
188
-
189
- i = 0
190
-
191
- for _ in range(N_STEPS):
192
-
193
- cycle = int(N_DATA / BATCH_SIZE)
109
+ hasakionndo_fit = model.predict()
194
-
195
- begin = int(BATCH_SIZE * (i % cycle))
196
-
197
- end = begin + BATCH_SIZE
198
-
199
- x_batch, t_batch = x_train[begin:end], t_train[begin:end]
200
-
201
- sess.run(train_step, feed_dict={x:x_batch, t:t_batch})
202
-
203
- i += 1
204
-
205
- if i % 2 == 0:
206
-
207
- loss_, acc_ = sess.run([loss, accuracy], feed_dict={x:x_batch,t:t_batch})
208
-
209
- loss_test_, acc_test_ = sess.run([loss, accuracy], feed_dict={x:x_test,t:t_test})
210
-
211
- print("[TRAIN] loss : %f, accuracy : %f" %(loss_, acc_))
212
-
213
- print("[TEST loss : %f, accuracy : %f" %(loss_test_, acc_test_))
214
-
215
- sess.close()
216
110
 
217
111
  ```
218
112
 
113
+ ### 発生しているエラー
114
+
115
+ 以下のようなエラーが発生します。
116
+
219
- ように書き換えればよいでしょうか?
117
+ csvファイル値が小数なのがけないのでしょうか?
118
+
119
+ ```
120
+
121
+ TypeError: Value passed to parameter 'a' has DataType string not in list of allowed values: bfloat16, float16, float32, float64, int32, int64, complex64, complex128
122
+
123
+ ```