import tensorflow as tf
from input_data import Data
import matplotlib.pyplot as plt
import os
data=Data("./data/")
X=tf.placeholder(tf.float32,[None,40,40,3])
y=tf.placeholder(tf.float32,[None,62])
keep_prob=tf.placeholder(tf.float32)
conv1_1=tf.layers.conv2d(X,filters=6,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
conv1_2=tf.layers.conv2d(conv1_1,filters=12,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
pool1=tf.layers.max_pooling2d(conv1_2,pool_size=4,strides=2,padding='same')
dropout1=tf.nn.dropout(pool1,keep_prob=keep_prob)
conv2_1=tf.layers.conv2d(dropout1,filters=24,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
conv2_2=tf.layers.conv2d(conv2_1,filters=48,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
pool2=tf.layers.max_pooling2d(conv2_2,pool_size=4,strides=2,padding='same')
print pool2.shape
reshape1=tf.reshape(pool2,[-1,4800])
print reshape1.shape
dropout2=tf.nn.dropout(reshape1,keep_prob=keep_prob)
dense1=tf.layers.dense(dropout2,units=62)
loss = tf.losses.softmax_cross_entropy(onehot_labels=y,logits=dense1)
step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
accuracy = tf.metrics.accuracy(labels=tf.argmax(y,axis=1),predictions=tf.argmax(dense1,axis=1))[1]
plt.ion()
plt.show()
x_draw=[]
y_draw=[]
weight_path="./result/tf/weights.w"
weight_path_index="./result/tf/weights.w.index"
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run([tf.global_variables_initializer(),tf.initialize_local_variables()])
if os.path.exists(weight_path_index):
saver.restore(sess, weight_path)
train_batch_size = 100
test_batch_size = 100
x_axis=0
for i in range(50*50):
X_train, y_train = data.next_batch(train_batch_size, 'train')
_,loss_val,accuracy_val=sess.run([step,loss,accuracy],feed_dict={X:X_train,y:y_train,keep_prob:0.7})
print("train\tloss_val=>" + str(loss_val) + "\t\taccuracy_val=>" + str(accuracy_val))
if i%50==49:
X_test, y_test = data.next_batch(test_batch_size, 'test')
loss_val,accuracy_val=sess.run([loss,accuracy],feed_dict={X:X_test,y:y_test,keep_prob:1})
print("test\tloss_val=>"+str(loss_val)+"\t\taccuracy_val=>"+str(accuracy_val))
x_draw.append(x_axis)
y_draw.append(accuracy_val)
x_axis+=1
plt.title("tf")
plt.plot(x_draw, y_draw, color='b')
plt.pause(0.1)
saver.save(sess,weight_path)
plt.savefig("./result/tf/result.png")
# -*- coding: utf-8 -*-
from keras.models import Sequential
from keras.layers import Dense,Flatten,Dropout,Reshape
from keras.layers.convolutional import Conv2D,MaxPooling2D
from keras import backend as K
import matplotlib.pyplot as plt
import os
from input_data import Data
from keras.optimizers import Adam
data=Data('./data/')
def build4(_name):
model = Sequential(name=_name)
model.add(Conv2D(input_shape=(40, 40, 3), filters=6, kernel_size=4, strides=1, padding='same', activation='relu'))
model.add(Conv2D(filters=12, kernel_size=4, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=4, strides=2, padding='same'))
model.add(Dropout(0.3))
model.add(Conv2D(filters=24, kernel_size=4, strides=1, padding='same', activation='relu'))
model.add(Conv2D(filters=48, kernel_size=4, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=4, strides=2, padding='same'))
model.add(Flatten())
model.add(Dropout(0.3))
model.add(Dense(units=62, activation='softmax'))
model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
return model
# model=build1("x1")
# model=build2("x2")
# model=build3("x3") #收敛快
model=build4("x4")
# model=build5("x5")
# model=build6("x6")
# model=build7("x7")
# model=build8("x8")
# model=build9("x9")
# model=build10("x10")
# model=build11("x11")
print(model.summary())
weight_path="./result/"+model.name+"/weights.w"
if not os.path.exists("./result/"+model.name):
os.mkdir("./result/"+model.name)
if os.path.exists(weight_path):
model.load_weights(weight_path)
plt.ion()
plt.show()
x_draw=[]
y_draw=[]
train_batch_size=5000
test_batch_size=100
for i in range(50):
X, y = data.next_batch(train_batch_size, 'train')
model.fit(X,y,batch_size=100,epochs=1,verbose=1)
model.save_weights(weight_path)
X_test, y_test = data.next_batch(test_batch_size, 'test')
loss, accuracy = model.evaluate(X_test,y_test,batch_size=test_batch_size)
print("epoch"+str(i)+",accuracy=>"+str(accuracy))
x_draw.append(i)
y_draw.append(accuracy)
plt.title(model.name)
plt.plot(x_draw,y_draw,color='b')
plt.pause(0.1)
plt.savefig("./result/"+model.name+"/result.png")
''''''