AIプログラム登録ページ

認証ページに移行すると学習計算ジョブを登録できます.->認証ページ

畳み込み(conv2d)と過学習抑制のためのドロップアウト(dropout)のコードは,こちらのページで開発してください.

<-CSVファイルはご準備ください.
開発コード
キャプション コードの簡単な表題を入力してください.
例:お天気が「晴れ(1)」または「晴れ以外(0)」を判別するプログラム
基本設定 (自動生成)
import tensorflow as tf
import numpy as np
import requests
import os

ckptdir="/mnt/ckpts/TFCode%id/"
ckptfile="/mnt/ckpts/TFCode%id/TFCode%id.ckpt"
csvfile="/mnt/teacherdata/capacitor/TFCode%id/TFCode%id.csv"
training_count=%training
batch_size=%num
csv_lines = sum(1 for line in open(csvfile))
if (batch_size > csv_lines):
 batch_size = csv_lines
step_size = csv_lines/batch_size
import tensorflow as tf
import numpy as np
import requests
import os
#%idにはデータベースの主キーが代入されます
ckptdir="/mnt/ckpts/TFCode%id/"
ckptfile="/mnt/ckpts/TFCode%id/TFCode%id.ckpt"
csvfile="/mnt/teacherdata/capacitor/TFCode%id/TFCode%id.csv"
training_count=%trainingnum #%trainingnumはデータベースから自動調整されます

batch_size=%num #%numはサーバのメモリに応じて自動調整されます
csv_lines = sum(1 for line in open(csvfile))
if (batch_size > csv_lines):
 batch_size = csv_lines
step_size = csv_lines/batch_size
定数定義
## 定数
IMG_SIZEX = 480 ## 学習させる画像の横幅
IMG_SIZEY = 480 ## 学習させる画像の縦幅
CHANNELS =3 ##学習画像のチャンネル数 RGB=>3 , グレースケール=>1
IMG_LENGTH = IMG_SIZEX * IMG_SIZEY * CHANNELS ## 学習させる画像データ長
LABEL_CNT = 2 ## ラベルの種類の数
学習変数初期化
## 学習に必要な変数の初期化
x = tf.placeholder(tf.float32, shape=[None, IMG_LENGTH])
W = tf.Variable(tf.zeros([IMG_LENGTH, LABEL_CNT]))
b = tf.Variable(tf.zeros([LABEL_CNT]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, shape=[None, LABEL_CNT])

#cross_entropy = tf.reduce_sum(y_ * tf.log(y))
#cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
cross_entropy = tf.reduce_sum(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(1e-7).minimize(cross_entropy)
#train_step = tf.train.AdamOptimizer().minimize(cross_entropy)

# Ref:http://blog.brainpad.co.jp/entry/2016/02/25/153000
CSVファイルの読み込み と学習キューの格納
## CSVファイルをワークキューとして設定
queue = tf.train.string_input_producer([csvfile])
reader = tf.TextLineReader()
key, val = reader.read(queue)
url, label = tf.decode_csv(val, [[''], [0]])
   
   
Tensorflowの初期化 (自動生成)
myconfig = tf.ConfigProto(
intra_op_parallelism_threads=0 )
myconfig.gpu_options.allow_growth = True
saver = tf.train.Saver()
sess = tf.Session(config=myconfig)
sess.run(tf.global_variables_initializer())

if os.path.exists(ckptdir)==True:
    saver.restore(sess,ckptfile)
    
   
myconfig = tf.ConfigProto(
intra_op_parallelism_threads=0 )
myconfig.gpu_options.allow_growth = True
saver = tf.train.Saver()
sess = tf.Session(config=myconfig)
sess.run(tf.global_variables_initializer())

if os.path.exists(ckptdir)==True:
    saver.restore(sess,ckptfile)
   
   
バッチ処理の準備
   
## バッチ処理の準備(CSVファイルの形式によってバッチ処理変数を適宜調整すること)
batch_url, batch_label = tf.train.batch([url, label], batch_size=batch_size, allow_smaller_final_batch=True)
#この例では、CSVファイルよりurlとlabel変数に格納された配列をbatch_sizeごとに分割している.

バッチ処理のスタート(自動生成)

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
 steps = 0
 while steps < step_size and not coord.should_stop():
  steps += 1

   

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
 steps = 0
 while steps < step_size and not coord.should_stop():
  steps += 1

   
データの正規化コード

  urls, labels = sess.run([batch_url, batch_label])
  image2=[]
  label2=[]
  for url in urls :
    r=requests.get(url,auth=auth)
    image = r.content

    ## 画像をTensorFlowで処理できるように変換
    image = tf.image.decode_jpeg(image, channels=CHANNELS)
    image = tf.image.resize_image_with_crop_or_pad(image, IMG_SIZEX, IMG_SIZEY)
    image = tf.reshape(image, [-1])
    image_val = sess.run(image).astype(np.float32) / 255.0
    image2.append(image_val)

  for label in labels :
    tmp = np.zeros(LABEL_CNT)
    tmp[label] = 1
    label2.append(tmp)
  image2 = np.asarray(image2)
  lable2 = np.asarray(label2)
  image2_len = len(image2)
   
   
学習コード

  for i in range(training_count):
   _,loss = sess.run([train_step, cross_entropy], feed_dict={x: image2[0:image2_len], y_: label2[0:image2_len]})
   #print('Step %d, Loss %f' % (i, loss)) #誤差の発散の確認用(デバッグ時のみ有効を推奨)

  sum_loss +=loss #学習終了後の誤差(loss)を加算する.バッチのステップ数分,加算される.
   
識別用コード
#ちょっときたないけど、コードを修正箇所を簡素化するために
p=sess.run(y, feed_dict={x: [image2[0]], y_: [label2[0]]})[0] #判定結果を格納する変数は'p'にしてください。
#print ("{0}:".format(url.decode('utf-8')),end='') #URLを表示
#print (np.argmax(p),end='') #判別結果を表示
#print ("(value = {0})".format(np.max(p))) #判別結果の確率を表示
   
終了処理 (自動生成)
finally:
  coord.request_stop()

coord.join(threads)

av_loss = sum_loss/step_size/batch_size #平均誤差(1検体当たりの誤差)
#print(av_loss) #デバッグ表示用
saver.save(sess,ckptfile)
sess.close()
finally:
  coord.request_stop()

coord.join(threads)

av_loss = sum_loss/step_size/batch_size #平均誤差(1検体当たりの誤差)
#print(av_loss) #デバッグ表示用
saver.save(sess,ckptfile)
sess.close()
教師データのCSVファイルの内容
最後の行は改行しないこと.
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708021509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708021519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708031509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708031519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708041509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708041519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708051509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708051519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708061509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708061519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708071509.jpg,0
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708071519.jpg,1
https://ftp.yz.yamagata-u.ac.jp/pub/camera/AXIS_000/201708081509.jpg,0
(最後の行は改行しないこと)
教師データのダウンロードURL
https://a.yamagata-u.ac.jp/amenity/Laboratory/Deeplearning/aitenki.aspx
行列のサイズ IMG_SIZEX * IMG_SIZEY * 3 * LABEL_CNT * 行列の数 を記述してください。
計算に必要なメモリの量を算出します。
例) 480 × 480 × 3(RGB) × 2 × 1(w) = 1382400
1学習あたりの繰り返し回数 1学習あたりの繰り返し学習回数をして下してください
  <-CSVファイルはご準備ください.