#include <iostream>
#include <algorithm>
#include <string>
#define null 0

using namespace std;


class node {
private:
	char x;
	node* left;
	node* right;
public:
	node(char data = ' ', node* _left = null, node* _right = null) {
		if (data == '.') {
			data = null;
		}
		else {
			x = data;
		}
		left = _left;
		right = _right;
	}
	void print() {
		cout << this->x;
		return;
	}
	node* getleft() {
		return this->left;
	}
	node* getright() {
		return this->right;
	}
	void setleft(node* data) {
		this->left = data;
		return;
	}
	void setright(node* data) {
		this->right = data;
		return;
	}
	void preorder(node* current) {
		if (current == null) return;
		else {
			cout << current->x;
			preorder(current->getleft());
			preorder(current->getright());
		}
	}
	node* find(node* current, char data) {
		if (current == null) return null;
		else {
			if (current->x == data)	return current;
			else {
				if (find(current->left, data) == null) {
					find(current->right, data) == null;
				}
			}
		}
	}
};

int main() {
	node t = node();
	int N;
	cin >> N;
	for (int i = 0; i < N; i++) {
		char root, lc, rc;
		cin >> root >> lc >> rc;
		if (root == 'A') {
			node lt = node(lc);
			node rt = node(rc);
			t = node(root, &lt, &rt);
		}
		else {
			node* temp = new node;
			temp = t.find(&t, root);
			node templ = node(lc);
			temp->setleft(&templ);
			node tempr = node(rc);
			temp->setright(&tempr);
		}
	}
	t.preorder(&t);
	cout << endl;
	return 0;
}

이 코드가 오류가 난다.

백준 1991을 풀다가 발견한 에러인데

생성자에 조건문 같이 제어문을 사용하면 에러가 발생하는 것 같다

마지막에 setleft를 통해서 값을 설정하려고 할때 this를 지정하는 것이 temp값으로 고정되어야하는데

다른 값으로 튀는 경우가 있었다.

왜 인지는 구글링해도 모르겠다.

한시간 날렸다....

그래서 기록한다

다른 사람들은 이런 문제를 겪지 않기를!!

 

https://developer.nvidia.com/cuda-80-ga2-download-archive

 

CUDA Toolkit 8.0 - Feb 2017

Select Target Platform Click on the green buttons that describe your target platform. Only supported platforms will be shown. Operating System Architecture Distribution Version Installer Type Do you want to cross-compile? Yes No Select Host Platform Click

developer.nvidia.com

여기서 cuda toolkit 8.0을 다운받았다.

그리고 sudo bash cuda_8.0.61_375.26_linux.run 으로 실행시켰다.

그러니 뜨는 오류

using unsupported compiler

 

이거의 해결방법은 간단하다.

sudo bash cuda_8.0.61_375.26_linux.run --override

로 해결할 수 있다.

 

그러나 이후에도 설치가 안됐는데 로그파일을 살펴보니

InstallUtils.pm이 없다는 오류가 있었다.

해결법을 찾아서 구글링하던 도중

https://devtalk.nvidia.com/default/topic/983777/can-t-locate-installutils-pm-in-inc/

불러오는 중입니다...

여기에서 해답을 찾았다.

결론만 말하자면

sudo sh ./cuda-l*.run --tar mxvf

을 하여 run파일의 압축을 푼 후

sudo cp InstallUtils.pm /usr/lib/x86_64-linux-gnu/perl-base/

로 파일을 복사한 후

export $PERL5LIB

로 export를 잡아준 후

sudo bash cuda_8.0.61_375.26_linux.run --override

명령어로 설치를 진행하면 잘 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import tensorflow as tf
import pandas as pd
import numpy as np
 
from gensim.models.wrappers import FastText
model_ft = FastText.load_fasttext_format("model_drama.bin")
print("fasttext model load finished")
 
def featurize_rnn(corpus,wdim,maxlen):
    rnn_total = np.zeros((len(corpus),maxlen,wdim))
    for i in range(len(corpus)):
        if i%1000 ==0:
            print(i)
        s = corpus[i]
        for j in range(len(s)):
            if s[-j-1in model_ft and j < maxlen:
                rnn_total[i][-j-1,:] = model_ft[s[-j-1]]
    return rnn_total
 
inp = pd.read_csv("train.csv")
total_data = inp[:]["text"].values.tolist()
total_label = np.array(inp[:]["smishing"].values.tolist())
rnn_total_text = featurize_rnn(total_data,100,100)
 
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Bidirectional, LSTM, Dense
def biLSTM(result):
    model = Sequential()
    model.add(Bidirectional(LSTM(64), input_shape=(len(result[0]), len(result[0][0]))))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1, activation="softmax"))
    model.summary()
    model.compile(loss="sparse_categorical_crossentropy",
                  optimizer=tf.keras.optimizers.Adam(1e-4),
                  metrics=['accuracy'])
    history = model.fit(result,
                        total_label,
                        epochs=10,
                        validation_split=0.1,
                        batch_size=512)
biLSTM(rnn_total_text)
cs

한국어 임베딩 부분인 feature_rnn함수는 https://github.com/warnikchow/dlk2nlp를 참고했습니다.

간단한 2진분류를 목적으로 했기 때문에 마지막 Dense는 1로 뒀습니다.

다양하게 분류하고 싶으시면 마지막 Dense를 늘려서 사용하시면 될 거 같아요

모델을 저장하는 부분은 차후에 업데이트 하도록 하겠습니다.

+ Recent posts