레이블이 Tensorflow인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Tensorflow인 게시물을 표시합니다. 모든 게시물 표시

2020년 6월 11일 목요일

Miniconda3 + Tensorflow 2 + PyCharm

Mac에 Tensorflow2 사용 환경 설치!! 


설치과정은 https://www.youtube.com/watch?v=MpUvdLD932c 를 참고하였음. 동영상은 2020년 1월에 업로드 되었으며, 아래는 동영상 내용을 요약한 것임


  1. Miniconda3 다운로드 : 구글에서 검색 (https://docs.conda.io/en/latest/miniconda.html)

  2. Miniconda3 설치 : 설치 후 터미널을 실행시키면 (base)라는 가상환경이 동작하는 것을 확인할 수 있다.

  3. Jupyter 설치 : 터미널에서 conda install jupyter 입력하면 (base) 환경에 jupyter가 설치된다.

  4. Environment Setup Script 파일 다운로드 : https://github.com/jeffheaton/t81_558_deep_learning에서 아래로 스크롤 다운하면, tensorflow.yml이라는 파일이 보이며, 이 파일을 다운로드하여 홈디렉토리에 tensorflow.yml로 저장한다.

    <파일내용>

    name: tensorflow

    dependencies:
          - python=3.7
          - pip>=19.0
          - jupyter
          - tensorflow=2.0
          - scikit-learn
          - scipy
          - pandas
          - pandas-datareader
          - matplotlib
          - pillow
          - tqdm
          - requests
          - h5py
          - pyyaml
          - flask
          - boto3
          - pip:
                - bayesian-optimization
                - gym
                - kaggle

  5. Environment Setup Script 파일 실행 :  conda env create -v -f tensorflow.yml를 실행시키면 위 파일 내용이 설치된다. 시간이 조금 걸린다.
    conda activate tensorflow로 (tensorflow) 가상환경을 활성화 시킨다.
    conda deactivate로 (tensorflow) 가상환경을 비활성화 시킬 수 있다.

  6. (tensorflow) 가상환경에 jupyter 커널 설치 : (tensorflow) 가상환경 상태에서 python -m ipykernel install --user --name tensorflow --display-name "Python3.7 (tensorflow)"을 입력한다.

  7. jupyter notebook 실행 : 커널에서 Python3.7 (tensorflow)를 선택하면 tensorflow를 사용할 수 있다.


Mac 터미널에서 가상환경 설정 변경!! 


이렇게 Miniconda와 Tensorflow를 성공적으로 설치하고 나니, 터미널을 켤 때마다 (base) 환경이 기본적으로 설정되는 문제가 발생하였다. 

===> 해결방법 :  (base) 프롬프트 상태에서 conda config --set auto_activate_base False 를 입력하고, 터미널을 재실행 시켜주면 해결된다.



PyCharm에서 project interpreter에 tensorflow 연결하기!! 


Miniconda와 Tensorflow를 설치하고, 터미널도 이전처럼 사용할 수 있도록 만들고나니 실제 개발환경인 PyCharm에서 tensorflow 환경을 연결할 일이 남았다.


  1. PyCharm 메뉴에서 Preferences를 누르면 창이 뜨는데,

  2. 왼쪽 메뉴 중 Project 서브 메뉴인 Project Interpreter를 선택하고,

  3. 오른쪽에 Project Interpreter 선택 창 옆 [톱니바퀴 모양] 버튼을 눌러 [Add...]를 선택하면 새 창이 뜨는데,

  4. 왼쪽 메뉴에서 Virtualenv Environment를 선택하고,

  5. 오른쪽 메뉴에서 Existing Environment 라디오 버튼을 선택하고, Interpreter 선택 창의 옆 [...] 버튼을 눌러 경로를 찾는 창이 나타나면, .../miniconda3/envs/tensorflow/bin/를 찾아 python을 선택한다.
    내 맥의 경우 /Users/sangjincho/opt/miniconda3/envs/tensorflow/bin/python 으로 선택되었고, Miniconda설치 환경에 따라 경로가 바뀔 수 있다.

  6. Interpreter를 선택한 후 아래의 Make available to all projects 체크박스를 선택하여 나중에 다른 프로젝트에서도 동일한 환경을 선택할 수 있도록 한다.

  7. [OK] 버튼을 누르면 창이 닫히고, Preferences 창에 사용할 수 있는 패키지 리스트가 나타난다. 마지막으로 [OK] 버튼을 누르면 PyCharm에서 tensorflow 환경이 갖춰진다.

5번 항목에서 Miniconda 설치 위치를 확인하려면, Finder에서 홈을 선택하고 숨김파일 보기(command+shift+.)로 전환하면 .conda라는 폴더가 보이고, 그 안에  environments.txt 파일이 있는데, 거기에 내가 설치한 가상환경, 여기서는 tensorflow에 해당하는 위치가 기록되어 있다.
















2018년 1월 18일 목요일

An unexpected error occurred on Navigator start-up psutil.AccessDenied (pid=725)

Anaconda Navigator Start Error

[검색 결과 #1]

에러 번호를 검색하여 찾은 것이나 정확하게 'pid=725' 항목은 아니었다. 하지만 따라하니 해결되었다.

please run

$ anaconda-navigator --reset

Did you try to run Navigator with sudo, and then without sudo (or Run as Administrator on Windows)?
Please update to the latest version of Navigator.
On Navigator click on the update button on the top right of the interface or
on the terminal type

$ conda update anaconda-navigator

출처 : <https://github.com/ContinuumIO/anaconda-issues/issues/1984>



[검색 결과 #2]

사실, 검색에서 'pid=725' 항목이 나온 결과도 있었으나, 따라해도 정상적으로 동작하지 않았다. 과정은 매우 유사한데 동작하지 않은 이유는 무엇일까?

Please remember to update to the latest version of Navigator to include
the latest fixes.

Open a terminal (on Linux or Mac) or the Anaconda Command Prompt (on windows)
and type:

$ conda update anaconda-navigator
$ conda update navigator-updater

출처 : <https://github.com/ContinuumIO/anaconda-issues/issues/7391>



2017년 12월 18일 월요일

Tensorboard 사용시 발생할 수 있는 현상

1. No scalar data was found.

텐서보드가 윈도우에서 동작할 때 발생할 수 있는 현상중 logdir과 관련된 것일 수 있다.
디렉토리 경로를 나타내는 ":\"을 정상적으로 인식하지 못하는 경우가 있다고 한다.
이를 해결하기 위한 방법은 2가지가 있는데,
     (1) logdir의 위치에서 텐서플로를 동작시키는 방법
     (2) logdir표기법을 다음과 같이 하는 방법 :
            --logdir foo:D:\some\path (동작한다고 한다.)
            --logdir D:\some\path      (동작하지 않는다고 한다.) 

[참고] Tensorboard has wrong logdir on Windows #54 

위 두 가지 중 한 가지 방법을 사용을 했는데도 해결하지 못했다면 작업 경로를 확인할 필요가 있다. 나의 경우 (1)의 방법을 적용하고 있는데 동작하지 않았다. 그래서 현재 작업 경로를 살펴보았더니 한글이 포함되어있었다. 혹시나 하는 마음으로 영문으로만 된 경로에 파일을 복사하고 실행시켰더니 동작이 되었다.

2. with tf.name_scope로 그룹화 했는데 [GRAPH]에서는 아무것도 보이지 않는다.

난감하네.

2017년 12월 3일 일요일

checkpoint file

체크포인트 파일(checkpoint file)은 학습된 모델을 저장한 파일을 일컫는다.

1. 체크포인트 파일 저장하기

최적화가 끝난 후 학습된 변수들을 체크포인트 파일에 저장한다.

     save.save(sess, './model/myNetwork.ckpt', global_step = total_step)

두 번째 인수는 체크포인트 파일이 저장될 위치와 체크포인트 파일의 이름을 의미하며, 체크포인트가 저장될 디렉토리(이 경우는 './model')는 미리 만들어져 있어야 한다.
세 번째 인수의 global_step의 값은 텐서 변수 또는 숫자 값을 넣을 수 있으며, 저장할 파일의 이름에 추가로 붙게되어 여러 상태의 체크포인트를 만들 수 있고, 가장 효과적인 모델을 선별하여 사용할 수 있다.

2. 체크포인트 파일 불러오기

./model이라는 디렉토리에 기존에 학습해둔 파일이 있는지 확인한다.

     ckpt = tf.train.get_checkpoint_state('./model')

모델이 있다면 saver.restore() 함수를 이용하여 학습된 값들을 불러오고, 아니면 변수를 새로 초기화한다.

     if ckpt and tf.train.checkpoint_exist(ckpt.model_checkpoint_path):
          saver.restore(sess, ckpt.model_checkpoint_path)
     else:
          sess.run(tf.global_variables_initializer())

3. 주의사항(?)

나만 멍청한 짓을 했나보다. 책을 보고 따라하다보니 체크포인트 파일을 저장하는데는 문제가 없었다. 일단 학습을 끝내고 체크포인트 파일에 저장하니 해당 폴더에 체크포인트 파일이 저장된 것을 확인할 수 있었다. 아래와 같이 첫 번째 실행은 정상적으로 잘 동작하였다.

runfile('C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3/golbin_checkpoint.py', wdir='C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3')
Step: 1 Cost: 0.735
Step: 2 Cost: 0.708
Prediction Value :  [0 1 2 0 0 2]
Target Value :  [0 1 2 0 0 2]
Accuracy : 100.00

이제 저장된 체크포인트 파일을 불러와서 모델을 실행시켜보고자 스크립를 'run'하였다.
스크립트의 두 번째 실행이었다. 아래와 같은 Error가 반겨주었다.

runfile('C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3/golbin_checkpoint.py', wdir='C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3')
INFO:tensorflow:Restoring parameters from ./model\dnn.ckpt-2
Traceback (most recent call last):

  File "<ipython-input-4-b4971a68fef7>", line 1, in <module>
    runfile('C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3/golbin_checkpoint.py', wdir='C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3')
<중략>
  File "C:\Users\Thriving_Zinnias\Anaconda3\envs\TF-35\lib\site-packages\tensorflow\python\client\session.py", line 1152, in _do_call
    raise type(e)(node_def, op, message)

NotFoundError: Key global_step_2 not found in checkpoint
[[Node: save_2/RestoreV2_35 = RestoreV2[dtypes=[DT_INT32], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save_2/Const_0_0, save_2/RestoreV2_35/tensor_names, save_2/RestoreV2_35/shape_and_slices)]]

Caused by op 'save_2/RestoreV2_35', defined at:
  File "C:\Users\Thriving_Zinnias\Anaconda3\envs\TF-35\lib\site-packages\spyder\utils\ipython\start_kernel.py", line 241, in <module>
    main()
<중략>
  File "C:\Users\Thriving_Zinnias\Anaconda3\envs\TF-35\lib\site-packages\tensorflow\python\framework\ops.py", line 1269, in __init__
    self._traceback = _extract_stack()

NotFoundError (see above for traceback): Key global_step_2 not found in checkpoint
[[Node: save_2/RestoreV2_35 = RestoreV2[dtypes=[DT_INT32], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save_2/Const_0_0, save_2/RestoreV2_35/tensor_names, save_2/RestoreV2_35/shape_and_slices)]]

이것때문에 몇시간을 허비하였다. 문제는 스크립트를 실행시키면 해당 내용이 커널에 계속 남아 있는다는 것이다. 이게 문제일거라고는 생각도 못했다.
커널을 재시작하고, 스크립트를 'run'하였더니 아래와 같이 잘 되었다. 모델을 불러와서 정상적으로 동작하면 화면에 나타나게 했던 'Trained model has been loaded.'가 보인다.

runfile('C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3/golbin_checkpoint.py', wdir='C:/Users/Thriving_Zinnias/AnacondaProjects/spyder-py3')
INFO:tensorflow:Restoring parameters from ./model\dnn.ckpt-2
Trained model has been loaded.
Step: 3 Cost: 0.704
Step: 4 Cost: 0.680
Prediction Value :  [0 1 2 0 0 2]
Target Value :  [0 1 2 0 0 2]
Accuracy : 100.00


2017년 12월 2일 토요일

InvalidArgumentError

데이터를 제대로 feed하지 못하여 발생한 어처구니없는 'InvalidArgumentError'
trainMLP->CrossEntropy->targetClass,predictClass->Layer->inputData
즉, 입력으로 feed해야할 데이터는 inputData, targetClass의 placeholder에 할당되어야 한다.

inputData    = tf.placeholder('float')#, shape = (1,numFeatures))
predictClass = tf.placeholder('float')#, shape = (1,numClass))
targetClass  = tf.placeholder('float')#, shape = (1,numClass))
print(targetClass)

Tensor("Placeholder_17:0", dtype=float32)
...
Layer = tf.add(tf.matmul(inputData, W), b)
predictClass = tf.nn.softmax(Layer)
crossEntropy = -tf.reduce_sum(targetClass * tf.log(predictClass))
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
trainMLP = optimizer.minimize(crossEntropy)
...
while True:
    sess.run(trainMLP, feed_dict={inputData: Features, predictClass: Classes})
    if (step+1) % 10 == 0:
        print(step+1, sess.run(crossEntropy, feed_dict={inputData: Features, predictClass: Classes}))
    if step > maxIteration:
        break
    step += 1

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args)
   1138     try:
-> 1139       return fn(*args)
   1140     except errors.OpError as e:

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata)
   1120                                  feed_dict, fetch_list, target_list,
-> 1121                                  status, run_metadata)
   1122 

~\Anaconda3\envs\tf35\lib\contextlib.py in __exit__(self, type, value, traceback)
     87             try:
---> 88                 next(self.gen)
     89             except StopIteration:

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\framework\errors_impl.py in raise_exception_on_not_ok_status()
    465           compat.as_text(pywrap_tensorflow.TF_Message(status)),
--> 466           pywrap_tensorflow.TF_GetCode(status))
    467   finally:

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_17' with dtype float
  [[Node: Placeholder_17 = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-41-a95816e42cf9> in <module>()
      1 while True:
----> 2     sess.run(trainMLP, feed_dict={inputData: Features, predictClass: Classes})
      3     if (step+1) % 10 == 0:
      4         print(step+1, sess.run(crossEntropy, feed_dict={inputData: Features, targetClass: Classes}))
      5     if step > maxIteration:

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
    787     try:
    788       result = self._run(None, fetches, feed_dict, options_ptr,
--> 789                          run_metadata_ptr)
    790       if run_metadata:
    791         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
    995     if final_fetches or final_targets:
    996       results = self._do_run(handle, final_targets, final_fetches,
--> 997                              feed_dict_string, options, run_metadata)
    998     else:
    999       results = []

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1130     if handle is None:
   1131       return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
-> 1132                            target_list, options, run_metadata)
   1133     else:
   1134       return self._do_call(_prun_fn, self._session, handle, feed_dict,

~\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args)
   1150         except KeyError:
   1151           pass
-> 1152       raise type(e)(node_def, op, message)
   1153 
   1154   def _extend_graph(self):

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_17' with dtype float
  [[Node: Placeholder_17 = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'Placeholder_17', defined at:
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel_launcher.py", line 16, in <module>
    app.launch_new_instance()
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\traitlets\config\application.py", line 658, in launch_instance
    app.start()
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\kernelapp.py", line 477, in start
    ioloop.IOLoop.instance().start()
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\zmq\eventloop\ioloop.py", line 177, in start
    super(ZMQIOLoop, self).start()
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tornado\ioloop.py", line 888, in start
    handler_func(fd_obj, events)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tornado\stack_context.py", line 277, in null_wrapper
    return fn(*args, **kwargs)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\zmq\eventloop\zmqstream.py", line 440, in _handle_events
    self._handle_recv()
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\zmq\eventloop\zmqstream.py", line 472, in _handle_recv
    self._run_callback(callback, msg)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\zmq\eventloop\zmqstream.py", line 414, in _run_callback
    callback(*args, **kwargs)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tornado\stack_context.py", line 277, in null_wrapper
    return fn(*args, **kwargs)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\kernelbase.py", line 283, in dispatcher
    return self.dispatch_shell(stream, msg)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\kernelbase.py", line 235, in dispatch_shell
    handler(stream, idents, msg)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\kernelbase.py", line 399, in execute_request
    user_expressions, allow_stdin)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\ipkernel.py", line 196, in do_execute
    res = shell.run_cell(code, store_history=store_history, silent=silent)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\ipykernel\zmqshell.py", line 533, in run_cell
    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\IPython\core\interactiveshell.py", line 2728, in run_cell
    interactivity=interactivity, compiler=compiler, result=result)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\IPython\core\interactiveshell.py", line 2850, in run_ast_nodes
    if self.run_code(code, result):
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-32-6f3ef8777c4a>", line 3, in <module>
    targetClass  = tf.placeholder('float')#, shape = (1,numClass))
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1530, in placeholder
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 1954, in _placeholder
    name=name)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 767, in apply_op
    op_def=op_def)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\framework\ops.py", line 2506, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "C:\Users\Sangjin Cho\Anaconda3\envs\tf35\lib\site-packages\tensorflow\python\framework\ops.py", line 1269, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_17' with dtype float
  [[Node: Placeholder_17 = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

람다 표현식 (Lambda expression)

람다 표현식(Lambda expression)  람다 표현식으로 함수를 정의하고, 이를 변수에 할당하여 변수를 함수처럼 사용한다. (1) 람다 표현식       lambda <매개변수> : 수식      ※ 람다식을 실행하...