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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

0回答

1632閲覧

機械学習を用いて、crcを推定

tome_neko

総合スコア7

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2019/08/23 05:43

CRC推定

機械学習を用いて、crc16ハッシュ値を推定しようとしているのですが、なかなかうまくいきません。どうすればよいかアドバイスお願いします。

現在はある一定の文字列とそれに対するcrc16ハッシュ値を与えて、LSTMを用いて学習を行っている状態です。

使用しているデータセット

['_-7.B!RX(Z2Tn*Uy', '47018'], ['yCZ!b_+.C=pnv;*r', '39828'], ['tR/w6RmkkT].+pmX', '17910'], ['G#a,)@}[H*2|M^v!', '7297'], ['&0:JBJ0G1toSy<q~', '57323']       ・       ・       ・ ['UV8EwMwB&#YzAYS]', '13023'] このような配列を15万個用意して使用

ソースコード

Python3.6.3

1import tensorflow as tf 2import keras 3import matplotlib.pyplot as plt 4from keras import layers 5from keras.callbacks import EarlyStopping 6from keras.utils import to_categorical 7from sklearn.model_selection import train_test_split 8from keras.preprocessing.text import Tokenizer 9from keras.preprocessing.sequence import pad_sequences 10from keras.models import Sequential 11from keras.layers import LSTM, Dense, Embedding, BatchNormalization 12from sklearn.metrics import confusion_matrix 13from keras.layers import Dense, Dropout 14from keras.layers import Input, Dense 15from keras.models import Model 16from keras import regularizers 17import os 18import datalist 19import numpy as np 20os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 21 22data = datalist.data 23N = len(data) 24data_xa, data_x, data_t = [], [], [] 25for d in data: 26 tmp_x = [] 27 for e in list(d[0]): 28 tmp_x.append(ord(e)) 29 data_xa.append(tmp_x) 30 data_x.append(d[0]) # 文書 31 data_t.append(d[1]) # ラベル 32 33# データセット 34#data_x_vec = xp.array(data_x_vec, dtype="int32") 35data_xa = np.array(data_xa, dtype="int32") 36data_t = np.array(data_t, dtype="int32") 37#print(data_x_vec) 38#print(data_t) 39dataset = [] 40for x, t in zip(data_xa, data_t): 41 dataset.append((x, t)) 42 43max_len = 17 44 45train_data, train_labels, test_data, test_labels = train_test_split( 46 data_xa, data_t, 47 test_size=0.2, random_state=0) 48 49x_train = pad_sequences(train_data, maxlen=max_len) 50x_test = pad_sequences(train_labels, maxlen=max_len) 51 52model = Sequential() 53model.add(Embedding(input_dim=512, output_dim=64)) 54model.add(BatchNormalization()) 55model.add(LSTM(64, dropout=0.5, return_sequences=True)) 56model.add(BatchNormalization()) 57model.add(LSTM(64, dropout=0.5, return_sequences=True)) 58model.add(BatchNormalization()) 59model.add(LSTM(64, dropout=0.5, return_sequences=False)) 60model.add(BatchNormalization()) 61model.add(Dense(65535, activation='softmax')) 62 63model.compile(loss='categorical_crossentropy', 64 optimizer='Adam', 65 metrics=['accuracy']) 66 67model.summary() 68 69num_classes = np.max(test_data) + 1 70y_train = to_categorical(test_data, num_classes) 71y_test = to_categorical(test_labels, num_classes) 72 73#y_train = test_data 74#y_test = test_labels 75 76print(y_train) 77 78history = model.fit( 79 x_train, y_train, 80 batch_size=128, 81 epochs=1000, 82 callbacks=[EarlyStopping()], 83 validation_data=(x_test, y_test), 84 shuffle=True, 85) 86 87score = model.evaluate(x_test, y_test, batch_size=128, verbose=1) 88print('Test score:', score[0]) 89print('Test accuracy:', score[1]) 90 91acc = history.history["acc"] 92val_acc = history.history["val_acc"] 93epochs = range(1, len(acc) + 1) 94 95plt.plot(epochs, acc, "bo", label = "Training acc" ) 96plt.plot(epochs, val_acc, "r", label = "Validation acc") 97plt.title("Training and Validation accuracy") 98plt.legend() 99plt.show() 100

試したこと

LSTM層を増やしたり、深くしたりしたが、結果は殆ど変わらず、常にval_accuracyが0.00000e+000となる

補足情報(FW/ツールのバージョンなど)

Python3.6.3, Keras2.2.4

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

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

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

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

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

tiitoi

2019/08/23 06:40

「一方向性関数の逆関数を作ろうとしている」という問題設定にそもそも無理があるのではないでしょうか。もしハッシュ値から元の入力が推定できたら、暗号の意味がなくなります。
tome_neko

2019/08/23 07:56

ハッシュ値から元の文字列を推定することはほぼ不可能であることは自分も理解しています。一応やろうとしていることは、文字列だけをみて、その文字列に対するcrc16ハッシュ値はこれだよーと、推定させるということです。もしかして今の自分のNN構築だと、tiitoiさんがおっしゃっているようなことをしようとしているのでしょうか?それとも、そもそも機械学習で推定すること自体が不可能なのでしょうか? 無知で申し訳ありませんが、お返事お待ちしております。
tiitoi

2019/08/23 08:31

datalist がどうなっているのかわからないですが、data_xa が元の文字列で data_t がハッシュ値なら、文字列 → ハッシュ値の関数を学習しようとしていることになるので、その点はこちらの勘違いだったかもしれません。失礼しました。 ただ、いずれにしても 文字列 → ハッシュ値の間になんらかの規則性がなさそうなので、Deep Learning に限らず、機械学習で学習できるとは思えません。
tome_neko

2019/08/23 08:56

お返事ありがとうございます。 やはり機械学習でcrc16を推定するのは難しいですよね... 一応、色んなアプローチを試してみることにします! ありがとうございました!!
aokikenichi

2020/09/18 10:02

解決されたとのことであれば質問を閉じていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問